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.
- 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