Code Monkey home page Code Monkey logo

free-games's Introduction

Free_Games.py


DEPRECATED

Please use the new-and-improved version that uses the Epic Games Desktop application instead of the web browser: Free-Games-V2



Original README

Literally just a script that is automatically ran via Windows Task Scheduler or Cron that logs into the Epic Games Store website and grabs the free games for the week. I've tested it on Windows, but there isn't any reason it wouldn't work on Linux as well. Just change the top line from #! python3 to #!/usr/bin/python3 and it should be fine.

Big shout-out to @ergoithz and their amazing function that finds the xpath for a given BeautifulSoup object. These updates wouldn't be possible without it! Check out their super-helpful function here: https://gist.github.com/ergoithz/6cf043e3fdedd1b94fcf

Another huge shout-out to @SonOfDiablo for creating and providing their awesome PowerShell script for installing geckodriver on Windows! Now you don't have to follow all the steps mentioned before. Just install the PowerShell script, and run it. This will: download and install the latest geckodriver for the correct architecture, install it, and add it to your path if it isn't already there: automagically! Find the script here: https://gist.github.com/SonOfDiablo/81f3d610295c69c777b512e4da90393d

Finally, a warm thank you to:

  • @Andriesmenze for fixing the script to work in the EU due to certain pop-ups that I wasn't seeing. Their work is very appreciated!
  • @Steve-Tech for adding some code to click the "Sign in with Epic Games" that apparently shows up now.
  • @Spifffff for modifying the Xpath for the cookies banner, for noticing that EGS requires email-only for logging in now, and for modifying the script to work with the games carousel that shows up sometimes
  • @lemasato for adding 2FA support, adding some more reliability and readability changes as well as adding functionality for multiple accounts to be used and staying on top of changes they do to the site like text on buttons and what not.
  • @Medallyon for cleaning up my README file, adding "requirements.txt" functionality, and making some important syntax changes as well as some credential detection stuff. This will help cut down on install time/complexity significantly.
  • @astranberg for expanding on multi-user support so you can now collect all the free games for multiple accounts.

Hope you enjoy! #! Mason Stooksbury

Updates! (12/21/2020)

  • Multi-user support so that free games can be claimed for as many accounts as you have.
  • Thank you again! In just a month we've gained like 20 more stars for a total of 80! And almost 10 more forks! You all continue to humble me with the amount of support this thing has gotten. Thank you again, and may your 2021 be so much better than this year.

Setup

Requirements

First, clone this repo using git clone https://github.com/MasonStooksbury/Free-Games.git. Then,

  1. Run pip install -r requirements.txt to automatically install dependencies

OR

Install them manually:

  • pip install lxml (for parsing the HTML from the webpage)
  • pip install selenium (for "roboting" the website)
  • pip install beautifulsoup4 (for better/more robust finding of objects and things)
  • pip install pyotp (for two-factor authentication)

Additionally

  • GeckoDriver (selenium needs this) Linux users can use this script to do everything for you after installing "jq" which is a JSON processor: https://gist.github.com/cgoldberg/4097efbfeb40adf698a7d05e75e0ff51. Windows users can use this script provided by @SonOfDiablo: https://gist.github.com/SonOfDiablo/81f3d610295c69c777b512e4da90393d.
  • Firefox - You can technically do all of this with Chrome, but it involves some more setup with selenium and particular drivers and I'm just too lazy. This works perfectly fine.
  • Enter the EPIC_EMAIL and EPIC_PASSWORD variables in the .env file to match your Epic Games Store account. Don't include any quotes here.
  • You may add multiple user accounts using comma separated values, e.g. [email protected],[email protected] EPIC_PASSWORD=pass1,pass2
  • While the scipt will technically work without 2FA enabled on your epic account, you will likely see many more captchas. In order to avoid this, follow the steps here to enable 2FA on your account and configure the script to work with your 2FA secret.
  • Finally, you may also want to jump into Free_Games.py and replace the user_agent variable (but you don't have to). There are instructions inside the script on how to do this.

Two-factor authentication

If you already have 2FA enabled on your account, you will be required to disable it temporarily. This is required to retrieve the key we need.

  1. Go to your Epic account settings and enable "Authenticator App".
  2. Keep a copy of the "Manual Entry Key". This will be used later in the python script. Do not close the page yet.
  3. On your phone, download Google Authenticator or another similar application.
  4. Using the application, scan the QR code visible on browser. Enter the code obtained from the application on the browser and click "Activate".
  5. Keep a copy of the "Rescue Codes". This will come in handy to retrieve your account if you ever lose access to your Authentificator application (losing phone, etc.)
  6. In the python script, input the "Manual Entry Key" retrieved earlier in the corresponding field, again leaving the single quotes as is.
  7. Done!

Finally

Now all you have to do is run python Free_Games.py, sit back & relax while your free games are being claimed (actually, you may have to complete a captcha upon signing in , but that's it).

Setting up Windows Task Scheduler

These steps should help you get Windows Task Scheduler setup in such a way that it will wake your computer from sleep and grab your free games then go back to sleep. It will also be setup to run again if something goes wrong as well as kill itself if it goes haywire. I realize the first picture shows it being setup for Vista and Windows Server 2008, but this was the only way it would work on Windows 10 without doing some wonky BIOS setup that only worked for some people.

  1. Fill out General:
    1. General
  2. Fill out Triggers:
    1. Triggers
  3. Fill out Actions:
    1. Actions
  4. Fill out Conditions:
    1. Conditions
  5. Fill out Settings:
    1. Settings

free-games's People

Contributors

andriesmenze avatar astranberg avatar dependabot[bot] avatar masonstooksbury avatar medallyon avatar programmeuris avatar spookyuser avatar steve-tech avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

free-games's Issues

Prevent captcha?

I am wondering if there is any way to avoid the captcha?
I tried removing the logoff from the end of the script in the hope that my browser session would prevail but that didn't help much.

Error

Traceback (most recent call last):
File "C:\Users\ארנון הכהן\Desktop\Free-Games\Free_Games.py", line 308, in
browser = start_firefox_browser(user_agent)
File "C:\Users\ארנון הכהן\Desktop\Free-Games\Free_Games.py", line 155, in start_firefox_browser
browser = webdriver.Firefox(profile) # Setup the browser object to use our modified profile
File "C:\Users\ארנון הכהן\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\selenium\webdriver\firefox\webdriver.py", line 160, in init
self.service = Service(
File "C:\Users\ארנון הכהן\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\selenium\webdriver\firefox\service.py", line 44, in init
log_file = open(log_path, "a+") if log_path is not None and log_path != "" else None
PermissionError: [Errno 13] Permission denied: 'geckodriver.log'
Press key to exit.

Script now crashes on login

I'm receiving the following error when running the script:
EmailChange

When inspected, the email input field's id is "email" instead of "usernameOrEmail", so I guess Epic changed that around. Has this ever happened before?

[Bug] Can't find Place Order button

It seems that Epic might have changed something on their site..
The script is no longer able to find the Place Order button.

Failed to click on 'Get' button. Using parent element workaround... Worked
Traceback (most recent call last):
  File "E:\Scripts\EpicFreeGames\Free-Games\Free_Games.py", line 315, in <module>
    claim_free_games()
  File "E:\Scripts\EpicFreeGames\Free-Games\Free_Games.py", line 248, in claim_free_games
    getGame()
  File "E:\Scripts\EpicFreeGames\Free-Games\Free_Games.py", line 80, in getGame
    raise TypeError("Unable to find 'Place Order' button")
TypeError: Unable to find 'Place Order' button

Headless support

Hey, thanks for the script!

I have been trying to have it running on my Ubuntu server so I had to make a few changes, for instance running it headless:

def start_firefox_browser(user_agent):
    profile = webdriver.FirefoxProfile()
    profile.set_preference("general.useragent.override", user_agent) # We will use the user-agent to trick the website into thinking we are a real person. This usually subverts most basic security
    options = Options()
    options.add_argument('--headless')

    browser = webdriver.Firefox(firefox_profile=profile, options=options) # Setup the browser object to use our modified profile
    browser.maximize_window()
    return browser

Unfortunately, it looks like it gets stuck on trying to read the captcha. Which I assume it might not really work without an X display at least. This is the output:

Logging into account [email]
Waiting - Cannot find 2FA input field - Possible captcha requiring completion

Weridly enough it does not even print the next warnings such as:

 print("Waiting to be automatically redirected to store page")

So I assume it gets stuck on

if not wait_until_xpath_clickable_then_click("//*[@id='continue']")

Any tips?

Game count shouldn't be constant.

Different game counts have appeared on EpicGames before so you should have it check for a count.

Basically what happens if there is 1 or 3 games?

How to modify to work with Firefox Portable?

Hi there,

I use Firefox Portable. How can I modify the script to load the path of my Firefox Portable exe? I don't want to have to install Firefox on my PC if I don't have to.

Capcha challenge

After running the script it looks like Epic Gamestore added a capcha for the selenium web driver, so after the verification page sits open the browser redirects you to the home page then exits.

NameError: name 'browser' is not defined

Hi there, this issue is a bit similar to #30 , but I already apt remove firefox & apt install firefox, so I guess you want take the log for a look.

$ python3 Free_Games.py
Traceback (most recent call last):
File "Free_Games.py", line 308, in
browser = start_firefox_browser(user_agent)
File "Free_Games.py", line 155, in start_firefox_browser
browser = webdriver.Firefox(profile) # Setup the browser object to use our modified profile
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/firefox/webdriver.py", line 170, in init
RemoteWebDriver.init(
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in init
self.start_session(capabilities, browser_profile)
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 1

Press key to exit.
Error in sys.excepthook:
Traceback (most recent call last):
File "Free_Games.py", line 296, in show_exception_and_exit
browser.quit()
NameError: name 'browser' is not defined

Original exception was:
Traceback (most recent call last):
File "Free_Games.py", line 308, in
browser = start_firefox_browser(user_agent)
File "Free_Games.py", line 155, in start_firefox_browser
browser = webdriver.Firefox(profile) # Setup the browser object to use our modified profile
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/firefox/webdriver.py", line 170, in init
RemoteWebDriver.init(
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in init
self.start_session(capabilities, browser_profile)
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/simon/.local/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 1'

No module named 'dotenv'

When running the python script I get the error below. Have tried installing dotenv again and it says Successfully installed python-dotenv-0.19.0 but still doesn't work.

Traceback (most recent call last): File "Free_Games.py", line 5, in <module> from dotenv import load_dotenv ImportError: No module named 'dotenv'

Any suggestions?

Unable to launch Firefox

I've followed the guide, script is starting but i'm receiving this error:

`Traceback (most recent call last):
File "C:\Free-Games-master\Free_Games.py", line 306, in
browser = start_firefox_browser(user_agent)
File "C:\Free-Games-master\Free_Games.py", line 153, in start_firefox_browser
browser = webdriver.Firefox(profile) # Setup the browser object to use our modified profile
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 170, in init
RemoteWebDriver.init(
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in init
self.start_session(capabilities, browser_profile)
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line

Press key to exit.
Error in sys.excepthook:
Traceback (most recent call last):
File "C:\Free-Games-master\Free_Games.py", line 294, in show_exception_and_exit
browser.quit()
NameError: name 'browser' is not defined

Original exception was:
Traceback (most recent call last):
File "C:\Free-Games-master\Free_Games.py", line 306, in
browser = start_firefox_browser(user_agent)
File "C:\Free-Games-master\Free_Games.py", line 153, in start_firefox_browser
browser = webdriver.Firefox(profile) # Setup the browser object to use our modified profile
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 170, in init
RemoteWebDriver.init(
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in init
self.start_session(capabilities, browser_profile)
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\Marco\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line`

I get this error when running the script? i am fairly new to running python.

(base) C:\Users\super>python C:\Users\super\Free-Games\Free_Games.py
Traceback (most recent call last):
File "C:\Users\super\Anaconda3\lib\site-packages\selenium\webdriver\common\service.py", line 76, in start
stdin=PIPE)
File "C:\Users\super\Anaconda3\lib\subprocess.py", line 775, in init
restore_signals, start_new_session)
File "C:\Users\super\Anaconda3\lib\subprocess.py", line 1178, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\super\Free-Games\Free_Games.py", line 308, in
browser = start_firefox_browser(user_agent)
File "C:\Users\super\Free-Games\Free_Games.py", line 155, in start_firefox_browser
browser = webdriver.Firefox(profile) # Setup the browser object to use our modified profile
File "C:\Users\super\Anaconda3\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 164, in init
self.service.start()
File "C:\Users\super\Anaconda3\lib\site-packages\selenium\webdriver\common\service.py", line 83, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

Press key to exit.
Error in sys.excepthook:
Traceback (most recent call last):
File "C:\Users\super\Free-Games\Free_Games.py", line 296, in show_exception_and_exit
browser.quit()
NameError: name 'browser' is not defined

Original exception was:
Traceback (most recent call last):
File "C:\Users\super\Anaconda3\lib\site-packages\selenium\webdriver\common\service.py", line 76, in start
stdin=PIPE)
File "C:\Users\super\Anaconda3\lib\subprocess.py", line 775, in init
restore_signals, start_new_session)
File "C:\Users\super\Anaconda3\lib\subprocess.py", line 1178, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\super\Free-Games\Free_Games.py", line 308, in
browser = start_firefox_browser(user_agent)
File "C:\Users\super\Free-Games\Free_Games.py", line 155, in start_firefox_browser
browser = webdriver.Firefox(profile) # Setup the browser object to use our modified profile
File "C:\Users\super\Anaconda3\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 164, in init
self.service.start()
File "C:\Users\super\Anaconda3\lib\site-packages\selenium\webdriver\common\service.py", line 83, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

Stuck on impossible Captcha

Issue

Captcha always requested, and on completion always wields "incorrect response" or "try again" (on login page after successfully filling email and password)
Last print before unable to continue: "Waiting - Cannot find 2FA input field - Possible captcha requiring completion"

what I've tried

  • changing the user_agent to what google outputs on search "what is my user agent" and trying with no user_agent at all
  • every time I open a firefox instance with Selenium through python and firefox starts in headless mode (stripes in search bar), even if I do everything manually, I'm not able to log in...
  • with and without 2FA
  • compleating the captcha over 10 times

system info

OS: Manjaro Linux x86_64
Host: 81SX Legion Y540-15IRH
Kernel: 5.10.89-1-MANJARO
DE: Plasma 5.23.4

comment

very nice script here tho :)
Seems like EpicGames might be detecting that firefox is in headless mode or started automatically somehow and shutting me down 🤔, can't figure out if and why I'm the only one having this problem

Script to download geckodriver for Windows

Hey,

I saw you linked to a script that would handle the install process of geckodriver for Linux (and mac) users, so I thought I would offer a script for windows users as well.

This PowerShell script will:

  1. Download the latest geckodriver zip (for the correct Architecture) to a temp folder
  2. Unzip the exe
  3. Check if geckodriver.exe already exists in the install directory ($env:APPDATA\geckodriver)
    • If it does the script will check file hashes to see if the new exe is different
      • If they are identical the script moves on to step 5
  4. Move the exe to the install directory
  5. Remove the temp directory
  6. Add the install directory to the user path (if it isn't already in the path)

The script can be found here: https://gist.github.com/SonOfDiablo/81f3d610295c69c777b512e4da90393d
There is two versions, one with comments and progress logging, and one without those things.

Working with 2FA

I know it kinda defeats the purpose of 2FA, but I wondered if it would be possible to implement the use of backup keys. Maybe an array, vector, etc and it uses one per week. Not sure if the script can keep it's state, but you could also have the user enter the week number when it is setup in the settings and then calculate the weekly offset from that.

ERROR though everything setup

image
Basically the order confirmation takes more time to load causing this to pop up. Please fix, thank you!
EDIT: I forgot to mention that it always tries to claim cookies though I NEVER got a cookie banner. Please tune it

EDIT2: sent a pull request fixing it

Can't install. Crashes at lxml

G:\Free-Games>pip install -r requirements.txt
Collecting beautifulsoup4==4.9.1
Using cached beautifulsoup4-4.9.1-py3-none-any.whl (115 kB)
Collecting lxml==4.6.3
Using cached lxml-4.6.3.tar.gz (3.2 MB)
Preparing metadata (setup.py) ... done
Requirement already satisfied: pyotp==2.4.0 in c:\users\rakib ryan\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 3)) (2.4.0)
Requirement already satisfied: python-dotenv==0.14.0 in c:\users\rakib ryan\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 4)) (0.14.0)
Requirement already satisfied: selenium==3.141.0 in c:\users\rakib ryan\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 5)) (3.141.0)
Requirement already satisfied: soupsieve==2.0.1 in c:\users\rakib ryan\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 6)) (2.0.1)
Requirement already satisfied: urllib3==1.25.10 in c:\users\rakib ryan\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 7)) (1.25.10)
Building wheels for collected packages: lxml
Building wheel for lxml (setup.py) ... error
error: subprocess-exited-with-error

× python setup.py bdist_wheel did not run successfully.
│ exit code: 1
╰─> [94 lines of output]
Building lxml version 4.6.3.
Building without Cython.
Building against pre-built libxml2 andl libxslt libraries
running bdist_wheel
running build
running build_py
creating build
creating build\lib.win-amd64-cpython-311
creating build\lib.win-amd64-cpython-311\lxml
copying src\lxml\builder.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\cssselect.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\doctestcompare.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\ElementInclude.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\pyclasslookup.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\sax.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\usedoctest.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml_elementpath.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml_init_.py -> build\lib.win-amd64-cpython-311\lxml
creating build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes_init_.py -> build\lib.win-amd64-cpython-311\lxml\includes
creating build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\builder.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\clean.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\defs.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\diff.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\ElementSoup.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\formfill.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\html5parser.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\soupparser.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\usedoctest.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_diffcommand.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_html5builder.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_setmixin.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_init_.py -> build\lib.win-amd64-cpython-311\lxml\html
creating build\lib.win-amd64-cpython-311\lxml\isoschematron
copying src\lxml\isoschematron_init_.py -> build\lib.win-amd64-cpython-311\lxml\isoschematron
copying src\lxml\etree.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\etree_api.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\lxml.etree.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\lxml.etree_api.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\includes\c14n.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\config.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\dtdvalid.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\etreepublic.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\htmlparser.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\relaxng.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\schematron.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\tree.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\uri.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xinclude.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlerror.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlparser.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlschema.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xpath.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xslt.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes_init_.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\etree_defs.h -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\lxml-version.h -> build\lib.win-amd64-cpython-311\lxml\includes
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\rng
copying src\lxml\isoschematron\resources\rng\iso-schematron.rng -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\rng
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
copying src\lxml\isoschematron\resources\xsl\RNG2Schtrn.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
copying src\lxml\isoschematron\resources\xsl\XSD2Schtrn.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_abstract_expand.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_dsdl_include.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_message.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_skeleton_for_xslt1.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_svrl_for_xslt1.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\readme.txt -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
running build_ext
building 'lxml.etree' extension
creating build\temp.win-amd64-cpython-311
creating build\temp.win-amd64-cpython-311\Release
creating build\temp.win-amd64-cpython-311\Release\src
creating build\temp.win-amd64-cpython-311\Release\src\lxml
G:\del2\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DCYTHON_CLINE_IN_TRACEBACK=0 -Isrc -Isrc\lxml\includes "-IC:\Users\Rakib Ryan\AppData\Local\Programs\Python\Python311\include" "-IC:\Users\Rakib Ryan\AppData\Local\Programs\Python\Python311\Include" -IG:\del2\VC\Tools\MSVC\14.35.32215\include -IG:\del2\VC\Tools\MSVC\14.35.32215\ATLMFC\include -IG:\del2\VC\Auxiliary\VS\include "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.1\include\um" /Tcsrc\lxml\etree.c /Fobuild\temp.win-amd64-cpython-311\Release\src\lxml\etree.obj -w
cl : Command line warning D9025 : overriding '/W3' with '/w'
etree.c
src\lxml\etree.c(289): fatal error C1083: Cannot open include file: 'longintrepr.h': No such file or directory
Compile failed: command 'G:\del2\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe' failed with exit code 2
creating Users
creating Users\RAKIBR1
creating Users\RAKIBR
1\AppData
creating Users\RAKIBR1\AppData\Local
creating Users\RAKIBR
1\AppData\Local\Temp
G:\del2\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe /c /nologo /O2 /W3 /GL /DNDEBUG /MD -I/usr/include/libxml2 -IG:\del2\VC\Tools\MSVC\14.35.32215\include -IG:\del2\VC\Tools\MSVC\14.35.32215\ATLMFC\include -IG:\del2\VC\Auxiliary\VS\include "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.1\include\um" /TcC:\Users\RAKIBR1\AppData\Local\Temp\xmlXPathInitxz0760ev.c /FoUsers\RAKIBR1\AppData\Local\Temp\xmlXPathInitxz0760ev.obj
xmlXPathInitxz0760ev.c
C:\Users\RAKIBR~1\AppData\Local\Temp\xmlXPathInitxz0760ev.c(1): fatal error C1083: Cannot open include file: 'libxml/xpath.h': No such file or directory
error: command 'G:\del2\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe' failed with exit code 2
*********************************************************************************
Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
*********************************************************************************
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for lxml
Running setup.py clean for lxml
Failed to build lxml
Installing collected packages: lxml, beautifulsoup4
Attempting uninstall: lxml
Found existing installation: lxml 4.9.0
Uninstalling lxml-4.9.0:
Successfully uninstalled lxml-4.9.0
Running setup.py install for lxml ... error
error: subprocess-exited-with-error

× Running setup.py install for lxml did not run successfully.
│ exit code: 1
╰─> [91 lines of output]
Building lxml version 4.6.3.
Building without Cython.
Building against pre-built libxml2 andl libxslt libraries
running install
C:\Users\Rakib Ryan\AppData\Local\Programs\Python\Python311\Lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
running build
running build_py
creating build
creating build\lib.win-amd64-cpython-311
creating build\lib.win-amd64-cpython-311\lxml
copying src\lxml\builder.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\cssselect.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\doctestcompare.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\ElementInclude.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\pyclasslookup.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\sax.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\usedoctest.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml_elementpath.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml_init_.py -> build\lib.win-amd64-cpython-311\lxml
creating build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes_init_.py -> build\lib.win-amd64-cpython-311\lxml\includes
creating build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\builder.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\clean.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\defs.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\diff.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\ElementSoup.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\formfill.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\html5parser.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\soupparser.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\usedoctest.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_diffcommand.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_html5builder.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_setmixin.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_init_.py -> build\lib.win-amd64-cpython-311\lxml\html
creating build\lib.win-amd64-cpython-311\lxml\isoschematron
copying src\lxml\isoschematron_init_.py -> build\lib.win-amd64-cpython-311\lxml\isoschematron
copying src\lxml\etree.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\etree_api.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\lxml.etree.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\lxml.etree_api.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\includes\c14n.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\config.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\dtdvalid.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\etreepublic.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\htmlparser.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\relaxng.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\schematron.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\tree.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\uri.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xinclude.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlerror.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlparser.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlschema.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xpath.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xslt.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes_init_.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\etree_defs.h -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\lxml-version.h -> build\lib.win-amd64-cpython-311\lxml\includes
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\rng
copying src\lxml\isoschematron\resources\rng\iso-schematron.rng -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\rng
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
copying src\lxml\isoschematron\resources\xsl\RNG2Schtrn.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
copying src\lxml\isoschematron\resources\xsl\XSD2Schtrn.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_abstract_expand.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_dsdl_include.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_message.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_skeleton_for_xslt1.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_svrl_for_xslt1.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\readme.txt -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
running build_ext
building 'lxml.etree' extension
creating build\temp.win-amd64-cpython-311
creating build\temp.win-amd64-cpython-311\Release
creating build\temp.win-amd64-cpython-311\Release\src
creating build\temp.win-amd64-cpython-311\Release\src\lxml
G:\del2\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DCYTHON_CLINE_IN_TRACEBACK=0 -Isrc -Isrc\lxml\includes "-IC:\Users\Rakib Ryan\AppData\Local\Programs\Python\Python311\include" "-IC:\Users\Rakib Ryan\AppData\Local\Programs\Python\Python311\Include" -IG:\del2\VC\Tools\MSVC\14.35.32215\include -IG:\del2\VC\Tools\MSVC\14.35.32215\ATLMFC\include -IG:\del2\VC\Auxiliary\VS\include "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.1\include\um" /Tcsrc\lxml\etree.c /Fobuild\temp.win-amd64-cpython-311\Release\src\lxml\etree.obj -w
cl : Command line warning D9025 : overriding '/W3' with '/w'
etree.c
src\lxml\etree.c(289): fatal error C1083: Cannot open include file: 'longintrepr.h': No such file or directory
Compile failed: command 'G:\del2\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe' failed with exit code 2
G:\del2\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe /c /nologo /O2 /W3 /GL /DNDEBUG /MD -I/usr/include/libxml2 -IG:\del2\VC\Tools\MSVC\14.35.32215\include -IG:\del2\VC\Tools\MSVC\14.35.32215\ATLMFC\include -IG:\del2\VC\Auxiliary\VS\include "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.1\include\um" /TcC:\Users\RAKIBR1\AppData\Local\Temp\xmlXPathInittrwl3p6x.c /FoUsers\RAKIBR1\AppData\Local\Temp\xmlXPathInittrwl3p6x.obj
xmlXPathInittrwl3p6x.c
C:\Users\RAKIBR~1\AppData\Local\Temp\xmlXPathInittrwl3p6x.c(1): fatal error C1083: Cannot open include file: 'libxml/xpath.h': No such file or directory
error: command 'G:\del2\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe' failed with exit code 2
*********************************************************************************
Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
*********************************************************************************
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
Rolling back uninstall of lxml
Moving to c:\users\rakib ryan\appdata\local\programs\python\python311\lib\site-packages\lxml-4.9.0.dist-info
from C:\Users\Rakib Ryan\AppData\Local\Programs\Python\Python311\Lib\site-packages~xml-4.9.0.dist-info
Moving to c:\users\rakib ryan\appdata\local\programs\python\python311\lib\site-packages\lxml
from C:\Users\Rakib Ryan\AppData\Local\Programs\Python\Python311\Lib\site-packages~xml
error: legacy-install-failure

× Encountered error while trying to install package.
╰─> lxml

note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.

Script doesn't close the cookie banner

The script now gets stuck when trying to close the cookie banner. The games aren't clickable when the cookie banner is still on screen, so the script can't continue.

Manually closing the cookie banner allows the script to continue, so I think the page structure must've changed as the script uses a static xpath to get to the banner. I'm working on a fix that uses beautifulsoup to get to the required tag, will create a pull request once it works.

Unable to login unless 2FA is enabled

I am hitting an issue where the login flow is stuck unless 2FA is enabled on the account.
Is there some logic that expect 2FA enabled for all accounts?

Unable to find login button

I just tried using the script but I got
Traceback (most recent call last): File "C:\Users\User\Documents\Software install\Free-Games\Free_Games.py", line 308, in <module> log_into_account(*credentials) File "C:\Users\User\Documents\Software install\Free-Games\Free_Games.py", line 169, in log_into_account raise TypeError("Unable to find login button") TypeError: Unable to find login button Press key to exit.
This worked before, so I'm thinking epic games store got updated again.

Cannot install "Microsoft C++ Build Tools" is requred

pip install -r requirements.txt

`Collecting beautifulsoup4==4.9.1
Using cached beautifulsoup4-4.9.1-py3-none-any.whl (115 kB)
Collecting lxml==4.6.3
Using cached lxml-4.6.3.tar.gz (3.2 MB)
Preparing metadata (setup.py) ... done
Requirement already satisfied: pyotp==2.4.0 in c:\users\makma\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 3)) (2.4.0)
Requirement already satisfied: python-dotenv==0.14.0 in c:\users\makma\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 4)) (0.14.0)
Requirement already satisfied: selenium==3.141.0 in c:\users\makma\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 5)) (3.141.0)
Requirement already satisfied: soupsieve==2.0.1 in c:\users\makma\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 6)) (2.0.1)
Requirement already satisfied: urllib3==1.25.10 in c:\users\makma\appdata\local\programs\python\python311\lib\site-packages (from -r requirements.txt (line 7)) (1.25.10)
Building wheels for collected packages: lxml
Building wheel for lxml (setup.py) ... error
error: subprocess-exited-with-error

× python setup.py bdist_wheel did not run successfully.
│ exit code: 1
╰─> [74 lines of output]
Building lxml version 4.6.3.
Building without Cython.
Building against pre-built libxml2 andl libxslt libraries
running bdist_wheel
running build
running build_py
creating build
creating build\lib.win-amd64-cpython-311
creating build\lib.win-amd64-cpython-311\lxml
copying src\lxml\builder.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\cssselect.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\doctestcompare.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\ElementInclude.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\pyclasslookup.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\sax.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\usedoctest.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml_elementpath.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml_init_.py -> build\lib.win-amd64-cpython-311\lxml
creating build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes_init_.py -> build\lib.win-amd64-cpython-311\lxml\includes
creating build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\builder.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\clean.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\defs.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\diff.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\ElementSoup.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\formfill.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\html5parser.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\soupparser.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\usedoctest.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_diffcommand.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_html5builder.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_setmixin.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_init_.py -> build\lib.win-amd64-cpython-311\lxml\html
creating build\lib.win-amd64-cpython-311\lxml\isoschematron
copying src\lxml\isoschematron_init_.py -> build\lib.win-amd64-cpython-311\lxml\isoschematron
copying src\lxml\etree.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\etree_api.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\lxml.etree.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\lxml.etree_api.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\includes\c14n.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\config.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\dtdvalid.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\etreepublic.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\htmlparser.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\relaxng.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\schematron.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\tree.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\uri.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xinclude.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlerror.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlparser.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlschema.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xpath.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xslt.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes_init_.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\etree_defs.h -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\lxml-version.h -> build\lib.win-amd64-cpython-311\lxml\includes
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\rng
copying src\lxml\isoschematron\resources\rng\iso-schematron.rng -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\rng
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
copying src\lxml\isoschematron\resources\xsl\RNG2Schtrn.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
copying src\lxml\isoschematron\resources\xsl\XSD2Schtrn.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_abstract_expand.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_dsdl_include.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_message.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_skeleton_for_xslt1.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_svrl_for_xslt1.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\readme.txt -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
running build_ext
building 'lxml.etree' extension
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for lxml
Running setup.py clean for lxml
Failed to build lxml
Installing collected packages: lxml, beautifulsoup4
Running setup.py install for lxml ... error
error: subprocess-exited-with-error

× Running setup.py install for lxml did not run successfully.
│ exit code: 1
╰─> [76 lines of output]
Building lxml version 4.6.3.
Building without Cython.
Building against pre-built libxml2 andl libxslt libraries
running install
C:\Users\makma\AppData\Local\Programs\Python\Python311\Lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
running build
running build_py
creating build
creating build\lib.win-amd64-cpython-311
creating build\lib.win-amd64-cpython-311\lxml
copying src\lxml\builder.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\cssselect.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\doctestcompare.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\ElementInclude.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\pyclasslookup.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\sax.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\usedoctest.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml_elementpath.py -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml_init_.py -> build\lib.win-amd64-cpython-311\lxml
creating build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes_init_.py -> build\lib.win-amd64-cpython-311\lxml\includes
creating build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\builder.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\clean.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\defs.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\diff.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\ElementSoup.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\formfill.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\html5parser.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\soupparser.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html\usedoctest.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_diffcommand.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_html5builder.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_setmixin.py -> build\lib.win-amd64-cpython-311\lxml\html
copying src\lxml\html_init_.py -> build\lib.win-amd64-cpython-311\lxml\html
creating build\lib.win-amd64-cpython-311\lxml\isoschematron
copying src\lxml\isoschematron_init_.py -> build\lib.win-amd64-cpython-311\lxml\isoschematron
copying src\lxml\etree.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\etree_api.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\lxml.etree.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\lxml.etree_api.h -> build\lib.win-amd64-cpython-311\lxml
copying src\lxml\includes\c14n.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\config.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\dtdvalid.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\etreepublic.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\htmlparser.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\relaxng.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\schematron.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\tree.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\uri.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xinclude.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlerror.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlparser.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xmlschema.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xpath.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\xslt.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes_init_.pxd -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\etree_defs.h -> build\lib.win-amd64-cpython-311\lxml\includes
copying src\lxml\includes\lxml-version.h -> build\lib.win-amd64-cpython-311\lxml\includes
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\rng
copying src\lxml\isoschematron\resources\rng\iso-schematron.rng -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\rng
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
copying src\lxml\isoschematron\resources\xsl\RNG2Schtrn.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
copying src\lxml\isoschematron\resources\xsl\XSD2Schtrn.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl
creating build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_abstract_expand.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_dsdl_include.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_message.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_skeleton_for_xslt1.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_svrl_for_xslt1.xsl -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\readme.txt -> build\lib.win-amd64-cpython-311\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
running build_ext
building 'lxml.etree' extension
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure

× Encountered error while trying to install package.
╰─> lxml

note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.`

Add 2FA tip/clarification to the readme

Hi, first of all thanks for this script, it is simply excellent. Just wondering if it would be worth adding some clarification/writing it as a tip in the readme, that 2FA should be enabled on your account for the script to work. At least in my experience, I was getting basically impossible to solve hcaptchas without 2FA enabled but with 2FA enabled the script works great. Would be happy to make the change to the readme if you're interested 👍

Logout redirects to regional page

I think request epic_logout_url + "?redirectUrl=" + uriencode(epic_store_url) is broken on Epic side because after logout I'm redirected to regional page and not en-US

Probably, you should check for li tag with login attribute?
изображение

Cannot find 2FA input field

Hello!
Got some trouble while running the script

Log

Logging into account <>
Waiting - Cannot find 2FA input field - Possible captcha requiring completion
Traceback (most recent call last):
File "Free_Games.py", line 307, in
log_into_account(*credentials)
File "Free_Games.py", line 179, in log_into_account
browser.find_element_by_id('code').send_keys(pyotp.TOTP(two_fa_key).now()) # 2FA login code
File "C:\Program Files (x86)\Python38-32\lib\site-packages\pyotp\totp.py", line 45, in now
return self.generate_otp(self.timecode(datetime.datetime.now()))
File "C:\Program Files (x86)\Python38-32\lib\site-packages\pyotp\otp.py", line 40, in generate_otp
hasher = hmac.new(self.byte_secret(), self.int_to_bytestring(input), self.digest)
File "C:\Program Files (x86)\Python38-32\lib\site-packages\pyotp\otp.py", line 57, in byte_secret
return base64.b32decode(self.secret, casefold=True)
File "C:\Program Files (x86)\Python38-32\lib\base64.py", line 231, in b32decode
raise binascii.Error('Non-base32 digit found') from None
binascii.Error: Non-base32 digit found

I put login, password, and rescue 2FA code into .env (also tried with normal 2FA code from the app) but after I complete captcha script cannot proceed

Does not work after manually filling out captcha

I tried testing it with spam accounts and doesnt seem to move past this message

image

Captcha and Arkose puzzle always appears for me for some reason. It does login on Epic but doesnt do anything once in the homepage, I did the captcha manually

Feature request: Use as standard module

It would be great if you added a function(s) inside the Free_games.py so we can do something along these lines, instead of using dotenv. I would like to integrate this script into a project that I'm working on.

import Free_Games

epic_games = Free_Games.claim(email='epic_email', password='epic_password', two_fa_key='epic_2fa_key')  # perhaps return the games that were claimed, or at a minimum the status of the claim function (true/false)

Add automatic WebDriver download

Proposal

Add webdriver-manager dependency to automate the process of retrieving the correct version of GeckoDriver (or ChromeDriver if needed) when user launches the script.

Result

If user installed a newer version of the browser this package will automatically download the correct version of the driver.

How

It is as simple as adding this dependency to the requirements.txt and then adding:

from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())

Multiple accounts not supported

Hey guys, would be great to support multiple accounts.

I've actually implemented this on my own, but I'm new to github and can't figure out how to push it.

Script occasionally crashes at login

The script occasionally crashes at login. It can't always find the email field. The id is still correct, so maybe the script is running faster than the page can load.

Adding a wait between these two statements, like so, seems to fix this:

browser.find_element_by_id("login-with-epic").click()
time.sleep(5)
fill_out_user = browser.find_element_by_id('email')

Regards,
Spifffff

set all thing but error.the firefox is new install.

Press key to exit.Traceback (most recent call last):
File "D:/PycharmProjects/untitled/Free-Games-master/Free_Games.py", line 308, in
browser = start_firefox_browser(user_agent)
File "D:/PycharmProjects/untitled/Free-Games-master/Free_Games.py", line 155, in start_firefox_browser
browser = webdriver.Firefox(profile) # Setup the browser object to use our modified profile
File "C:\Users\86765\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 174, in init
keep_alive=True)
File "C:\Users\86765\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in init
self.start_session(capabilities, browser_profile)
File "C:\Users\86765\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Users\86765\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\86765\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line

Cannot find 2FA input field

After setting up all the requirements, I ran the python module but I had to complete a Captcha and was given 'Waiting - Cannot find 2FA input field - Possible captcha requiring completion' in the CLI.

I was unsure where to add the "Manual Entry Key" and just added it to the EPIC_TFA_TOKEN in the .env file.

Probrably doing something wrong

Traceback (most recent call last):
File "C:\Users\Diobo\Free-Games\Free_Games.py", line 308, in
browser = start_firefox_browser(user_agent)
File "C:\Users\Diobo\Free-Games\Free_Games.py", line 155, in start_firefox_browser
browser = webdriver.Firefox(profile) # Setup the browser object to use our modified profile
File "C:\Users\Diobo\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 170, in init
RemoteWebDriver.init(
File "C:\Users\Diobo\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in init
self.start_session(capabilities, browser_profile)
File "C:\Users\Diobo\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Users\Diobo\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\Diobo\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line

Should the computer be on?

Should the computer be on as I wont be using the pc for a few months and would be missing the free games...so do we need to leave the computer on?

IndexError: list index out of range

After logging in to Epic and going to the store page it spits out this:

Traceback (most recent call last):
  File "G:\X\Documenten\Free-Games-master\Free_Games.py", line 71, in <module>
    is_game_1_free = True if root.xpath(game_1_xpath + '/text()')[0] == 'Free Now' else False
IndexError: list index out of range

script can't input 2fa code properly

Looks like the script can't go to the beginning of the 2fa code field by pressing home anymore (tested manually, pressing home does nothing), so I made a workaround just by making it press left 10 times instead of home (I know half the keypresses are redundant, but just to be sure), which works fine so I thought i should make the issue known.

Support for running in Linux virtual server

Although it can run successfully in linux, for virtual server like wsl, vps, etc. it is unrealistic to install firefox. Just like this #30.

Is there any way to run this script successfully on a virtual server?

Problem with split

Hello, I just dowloaded the script and did ( I think ) everything asked well, I think I dowloaded all the modules, but when I run the script, I have this error :
Traceback (most recent call last):
File "C:\Users\name\Desktop\Code\Free-Games-master\Free-Games-master\Free_Games.py", line 5, in
from dotenv import load_dotenv
ModuleNotFoundError: No module named 'dotenv'

I tried to download using pip ( i'm an absolute noob so don't judge me ) and nothing appeared to work... Can you help me ? I really want to have those sweet free games without using my body and my precious energy :(

Can I use google accounts?

I have loads of free games on my google acc and don't want to create a new epic games account that doesn't have the ones that I've been getting for the past few months.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.