When upgrading to a new version, make sure to follow the directions under the "Upgrading" header of the corresponding version. If there is no "Upgrading" header for that version, no post-upgrade actions need to be performed.
- Set local timezone in Docker container to avoid 403/429 errors
(#342 by @dmytrokoren)
- The idea to set the timezone in Docker comes from @yunhao-jiang
- The notification configuration has been redone. This allows users to specify the notification level and time format individually for each service. See the notification configuration for more information as well as how to update your configuration file (#328)
- Use a specific error message when handling canceled reservations
- [Development] Ruff is now used to lint and format the project
- Due to the changes in the notification configuration, you will need to update your configuration file to the new format. See the notification configuration for how to do so
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- A JSON Schema definition was added to help users validate their configuration files through updates
(#320 by @kaveet)
- If you want to use this schema, you'll need to add the following line to your
config.json
file:"$schema": "config.schema.json"
- If you want to use this schema, you'll need to add the following line to your
- Official support for Python 3.13
- Support for Python 3.8 has been dropped
- Logins that fail due to 'Too Many Requests' or 'Internal Server Error' errors will now be retried once (#311 by @dmytrokoren)
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- The script no longer works on Python 3.8. If you are using Python 3.8, you will need to upgrade to a newer version
- Fare drops can now be checked for all flights on the same day or all nonstop flights on the same day
(#303)
- The following values in your
check_fares
configuration will enable this featuresame_day
will check all flights on the same daysame_day_nonstop
will check all nonstop flights on the same day
- Detailed information can be found in the check_fares documentation
- The following values in your
- Potentially speed up the check-in process
- Check-ins now start exactly 24 hours before a flight (instead of 24 hours and 5 seconds)
- Improve detection evasion in the Docker image by using a virtual display (#307 by @dmytrokoren)
- Fix headers not being retrieved, causing a webdriver timeout (#314 by @sephamorr)
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- A new notification level for notices (non-critical warnings) was added, which includes
driver timeouts and Too Many Requests errors during logins. This is the lowest notification level offered
- The default configuration is still the same. Refer to the notification level configuration for more details on the levels
- If you have manually set
notification_level
in your config.json, see the "Upgrading" header for how to adjust it for the new notification levels
- Mitigations for 403 and 429 errors were added to significantly improve Docker and server environments as well as checking many accounts and reservations at once (#274 by @dmytrokoren)
- Fare checks now run faster due to caching a flight's reservation information from previous queries to Southwest's API
- The script now runs as a non-root user in Docker to improve a container's security
- Error messages during check-ins and reservation retrievals relating to reservation/passenger not found, invalid confirmation number length, and airport check-in required are more detailed
- Add a backup NTP server to make retrieving time much more reliable (#284 by @dmytrokoren)
- Adapt check-ins to use Southwest's new API (#282 by @dmytrokoren)
- Fix the webdriver failing to start when using Docker (#291 by @ne0ark)
- If you manually set
notification_level
in your configuration, it will need to be adjusted accordingly.- If it was set to
2
(error messages only), it needs to be set to3
- If it was set to
1
(all messages), it needs to be set to2
- Refer to the notification level configuration for more details on the levels
- If it was set to
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- Times are now fetched from an NTP server when possible (#235)
- This mitigates issues with the time being off on computers running the script, which may cause failed check-ins
- Indicators were added in some log messages and the Readme for when the script may take a while while using the browser (#237)
- When a lower fare notification is sent, the Southwest desktop URL will also be sent for convenience (#270 by @natecodes)
- Fix some cases in which departed flights still attempt to check in (#257)
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- ntplib is a now a dependency
- A development container configuration was added to make it easier for contributors to use GitHub Codespaces for the project (#240 by @ankit-jha)
- Screenshots of the browser can now be taken at different stages in the script by running the script with the
--debug-screenshots
argument- The screenshots are stored in the
logs/
directory
- The screenshots are stored in the
- Same-day flights are now correctly checked in (#241)
- Fix another case where the script would wait for headers to be set forever
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
Note: It seems that Southwest has been refactoring their API, so updating to this version is necessary for the script to adapt to these changes (and expect more potential issues!).
Note 2: Due to #230 and #201, you may still run into issues when running this script in Docker (although, some people have ran into this issue outside of Docker as well).
- An official ARMv7 Docker image is now supported (#77)
- Healthchecks.io integration is added to monitor for successes and failures during fare checking
(#203 by @StevenMassaro)
- For details on how to set this integration up, see the configuration documentation
- Flight times are now displayed by the local 12-hour time in notifications
(#227)
- Times can be changed to 24-hour format using the notification_24_hour_time configuration option
- Fix passwords not being input correctly into Southwest's login page (#223)
- Fix an index error during fare checking that resulted in either a crash or monitoring of the wrong flight (#224)
- Fix pop-ups on the Southwest website from interfering with logging in (#226)
- Fix an issue with script logging not working in some cases on Windows
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
Note: Due to #201, the Docker image is currently failing to log in to accounts and check in to flights. The workaround for now is to run the script locally with Python, if possible
- Added environment variable alternatives for many configuration items
(#210 by @joewesch)
- Details on how to configure environment variables can be found in the Configuration documentation
- Fix failed logins not reporting the correct error (#189)
- Handle flight departure time changes mostly correctly
- If a flight is rescheduled within the retrieval interval (default is 24 hours) of the check-in, the flight is still not handled correctly. See #199
- Don't notify check-ins for lap child passengers (#205 by @pcarn)
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- Remind users with international flights to fill out their passport information in the scheduling notification (#182)
- Fix situations where the Chromedriver version isn't available for the current browser version (#180)
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- Added official Python 3.12 support
- Python 3.7 is officially unsupported now
- A Docker Compose example is now in the Readme under the Running in Docker section (#171 by @ntalekt)
- A new FAQ question was added to help users that run into issues starting the webdriver in Docker
- If you find a better solution to this issue, please let me know
- Another new FAQ question was added to clear up confusion about putting a computer to sleep that is running this script
- Ensure the chromedriver version always matches the downloaded browser version (#172)
- Fix logging in not always submitting Southwest's login form correctly. Thanks to @bradzab0623 for help fixing this issue
- Fix Docker image not working on ARM architecture (#177)
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- If you are using Python 3.7, the script still works. However, it is officially unsupported and therefore recommended to upgrade to a newer version
- Flights are now identified by their flight number, ensuring the correct flight is referenced when checking fares and scheduling check-ins
- Fix a 'Too Many Requests' error when using Docker (#159)
- SeleniumBase is now used as the script's browser framework. This has brought a lot of changes to the script, mostly through performance improvements
- Specifying your browser's executable path can now be done in the configuration
- Allows you to use other browsers besides Chrome and Chromium (such as Brave)
- Fares will now be checked for flights by default (
check_fares
does not need to be specified astrue
in yourconfig.json
for fares to be checked now) - Integration tests were added to further increase the reliability of the script
- Fix logging in failing on Chrome v117+ (fixed by SeleniumBase)
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- You may want to recreate your virtual environment as
undetected_chromedriver
andseleniumwire
were removed
- You may want to recreate your virtual environment as
- Both
chrome_version
andchromedriver_path
have been removed from the configuration. SeleniumBase now automatically handles downloading the correct driver, so you don't need to worry about having a version mismatch - If you do not want fares to be checked,
check_fares: false
is now needed in yourconfig.json
- Ctrl-C is now handled better on Windows systems
- Fix issues when checking flights for multiple accounts/reservations at the same time (such as 'Text file busy')
(#138 by
@StevenMassaro)
- Since these checks are now run sequentially, it may take longer on the initial startup to get notifications for all your check-ins. This does not affect the check-in process at all
- Fix authentication issue for passwords with special characters (#140 by @davidkassa)
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- Same day flight check-ins currently don't work for the second flight. If you have a same-day flight (departing and return flights are within 24 hours of each other), see my comment on issue #135 to test a potential fix for this issue (and report back if it worked or not)
- Account and reservation-specific configurations are now supported. See Accounts and Reservations for more information (#124)
- Pressing Ctrl-C now gives you information on cancelled check-ins instead of displaying a Traceback
- An FAQ section was added to the Readme. This is a place where commonly asked questions are answered. If you think additional questions should be added to this section, feel free to submit a Discussion or Pull Request with your proposal.
- Add a note about checking in a companion in the README. See #126 for more information
- Fix incorrect price parsing when fares are not available for a flight (#122)
- The 'flights' key in the configuration file was renamed to 'reservations'. See the reservation configuration for more information.
- Fix flight scheduling on Windows and macOS systems (#120)
- Fix a potential JSON decode error on failed requests
- This project is now licensed under the GPLv3 license instead of the MIT license
- Automatically handle flight changes and cancellations (#103)
- Don't send lower fare notifications when the price difference is only -1 USD
- This is a false positive. Refer to #102 for more information
- The 'flights' key in the configuration file was renamed to 'reservations'. It is currently deprecated and will be removed in the next release. See the configuration for more information.
- Upgrade the dependencies to the latest versions by running
pip install -r requirements.txt
- Make the webdriver initialization more resistant to random issues (#89 and #90)
- Skip flight retrieval when a bad request is encountered. Previously, the script would exit
- Handle cases where no fares are available for a flight (#86)
- Ensure the correct flight's fares are checked (#92)
- Add fare checker (#73)
- Improvements and fixes by @fusionneo
- This is currently in beta testing and can be enabled with the check_fares configuration option
- Improve webdriver speed and reliability (#76 by @fusionneo)
Upgrade the dependencies to the latest versions by running pip install -r requirements.txt
- Users can now specify a custom path to a Chromedriver executable (#65)
- All Chromium-based browsers are now officially supported
- Docker image optimizations (#65):
- Official ARM support (#27)
- Alpine Linux is now used, reducing image size by 40%
- A logger was added to enable better troubleshooting for both users and developers (#47)
- A verbosity flag can be specified (
--verbose
or-v
) to print debug messages to stderr. Shorthand for--version
flag is now-V
(#47) - Account monitoring can now be disabled by providing a value of
0
to theretrieval_interval
configuration option (The account will only be checked once) - The Docker image is now available in the public repository. See the
Running in Docker
section of the Readme for more details (#55)
- Sleep time no longer overflows for flights very far into the future (#50)
- Only attempt to schedule reservations that are flights (#53 by @samdatkins)
Upgrade the dependencies to the latest versions by running pip install -r requirements.txt
- A
--help
flag was added to display information on how to use the script - Added official Python 3.11 support
- A Configuration guide was written to facilitate the script's configuration
- Allow multiple accounts/flights to be run in one instance of the script (#33)
- A Contributing document was added to provide potential contributors with a guide on how they can help with the project.
- Allow users to specify a specific Google Chrome version to use (#40)
- Optimized the script's entrypoint so the user is no longer required to install the requirements (besides Python)
to use the
--version
and--help
flags. This also makes responses for those flags instantaneous
Upgrade the dependencies to the latest versions by running pip install -r requirements.txt
- Many internal changes were done to improve the codebase, making the execution flow much more practical (Thanks to @sdstolworthy for the proposed refactors)
- If login credentials are provided, the script will continuously monitor the account for new flights, scheduling check-ins automatically (Fixes #10). The interval can be modified with the retrieval_interval config option
- The version of the script can now be retrieved with the
--version
or-v
flag
Upgrade the dependencies to the latest versions by running pip install --upgrade -r requirements.txt