Note: This does not work with FIFA 19. You can probably adapt it to do so, but I haven't been developing this for several months.
Q: Will you be making a bot for FIFA 19?
Not likely. You'll see updates here if I ever do, but I've got a lot more projects to work on before I can move onto this again.
Q: How do I avoid detection?
As far as I can tell, EA only monitors for:
- mismatched HTTP request headers
- PinEvents for HTTP requests that don't fire when they should
- Too many requests (HTTP or clicks)
- Too fast of requests (HTTP or clicks)
- Being too slow to respond to CAPTCHA
- Running for many hours in a day
- Running for too long without a break
Q: Should I make an auto-clicker bot myself (with Selenium)
If I were to do it over again, I'd just build one off of oczkers' FUT API wrapper instead of Selenium.
There aren't any HTML elements the bot can pull for card IDs. This becomes a massive slow-down once special cards are released (TOTS, POTW, etc) and a single player has 5-6 cards.
Note: This repo is not meant for the public. You're welcome to use it, but I am not providing support and you'll need to be semi-experienced with Python to get it running.
This is an auto-clicker bot used to trade players and items on FIFA Ultimate Team's Web App.
Click this image for a video demo that covers a few capabilities:
- Set-and-forget: runs everything automatically.
- Can buy and sell players and some consumables using Buy It Now and/or auctions
- Gathers SBC solutions, buys the players, and enters them into SBC solution, automatically
- Can automatically manage transfer, watch, and unassigned lists
- Can apply consumables to each individual member in any squad, optionally including subs and reserves (individual fitness, contracts, etc.)
- Contains numerous strategies that can be customized easily
- Desktop and AutoRemote (Android app) notifications
- Stealth:
- There was a big ban wave in early 2018. The commercial bots got hit. This one did not.
- Uses randomized delays and off-center clicking to mimic human interactions
- Uses randomized keep-alive
- Customizeable maximum rate of user server requests
- You can compile chromedriver yourself here and change
key
incall_function.js
to something random, as seen here
- Notifications for captcha, buy, sell, etc
- Fairly verbose logging and console output
- Price checks with Futbin or Futhead
- Saves price data and user buy/sell data in sqlite database
- IMAP support: can auto-login with 2-factor email authentication
- Passwords are saved locally using OS's credential manager. They can optionally be encrypted with a master password
- Runs on Selenium to mimic human interactions for better stealth. This requires higher CPU and RAM usage as well as additional delays due to page load times that you wouldn't see with something that uses EA's API directly.
- Try changing
lag_multiplier
inglobal.yml
to something larger if you get errors because your comupter or connection are slow.
- Try changing
- FUT web app doesn't differentiate well between similar cards of the same player (e.g. Gold Diego Costa with a club change).
- In order to accurately get the price of the right card, all player card possibilities are grabbed from EA database and stored locally. Cards that appear in web app searches are then compared with those in the database and the closest match is returned. This is slightly slow and you will often be out-sniped by API-only bots.
- When FIFA was first released, this wasn't an issue. But as more and more new card variations were released, this was the only way to solve this issue without direct API calls (which are less stealthy).
- EA database must be manually updated. It takes ~10 minutes to complete. You can update it manually by executing
update_player_data()
indatabase.py
.
- Python 3.5+ (only tested in v3.5)
- Chromedriver 2.39+ (only tested in v2.39)
- Python packages:
- selenium
- ruamel.YAML
- signal
- simple-crypt
- requests
- sqlite3
- ast
- json
- re
- Fast computer and internet connection
- An understanding of Python
-
Install Python, Chromedriver, and Python packages
-
Pull or clone this repo
-
Rename
config\botExample.yml
tobot1.yml
- Open it and input your user info at the bottom
-
Rename
config\globalExample.yml
toglobal.yml
- Input appropriate
path_to_chromedriver_exe
- Change other settings as needed
- Input appropriate
-
Edit
RunExample.py
to your liking- There's a lot of examples in there. Comment in what you want to run and comment out what you don't. Read the code and change as necessary
- Add readmes to each folder
- Add gif that shows bot operate
- Clean up code, refactor as necessary - After reading Clean Code, I realize the code could be a lot cleaner
- Make install easier
- Have it create databases from scratch
- Have it auto-generate blank
bot*.yml
ifSession(bot_number=*)
doesn't exist - Store all settings in database, instead of yaml files
- Completely refactor to use oczkers' FUT API wrapper instead of Selenium
- The increased likelihood of being caught is worth the increased speed, unless web app security increases significantly in the future
- Increased risk can be mitigated by frequently running a separate bot that logs in via Selenium (like this one) and compares all HTTP method parameters and cookies using BrowserProxyMob to make sure they match what oczker's API is sending
- The increased likelihood of being caught is worth the increased speed, unless web app security increases significantly in the future
- Write unit tests
- This code is likely pretty inefficient. It could probably be made better by using more appropriate data structures and improving time and space complexity of some of the functions--especially the ones involving the player database and the ones that find sniping filters