Coder Social home page Coder Social logo

wodsuz / easyapplyjobsbot Goto Github PK

View Code? Open in Web Editor NEW
322.0 14.0 108.0 5.5 MB

A python bot to automatically apply all Linkedin,Glassdoor, etc Easy Apply jobs based on your preferences. Auto login, auto fill additional questions, apply automatically!

Home Page: https://www.automated-bots.com/

License: Other

Python 100.00%
automation python3 bot selenium linkedin ai challenge chatgpt jobs apply-jobs

easyapplyjobsbot's Introduction

Automated Bots - Easy Apply Jobs Bot πŸ€– - https://www.automated-bots.com/

linkedineasyapplygif A python bot to apply all Linkedin Easy Apply jobs based on your preferences.

Please be aware that there are forked/similar looking versions of this bot using scam, phishing donation links. While purchasing make sure you are on www.automated-bots.com page or just like below page have check our logo on each crypto payment site,

Copyright image

This is the free version of the bot, you can fork & modifty it by crediting us and without changing the donation links. To use the pro version you can visit our site www.automated-bots.com

Demo

Easy Apply Jobs Bot Pro version running on Linux Firefox Browser

Automated.Bots.Linux.Firefox.mp4

Easy Apply Jobs Bot Pro version running on Linux Chrome Browser

Automated.Bots.Linux.Firefox.mp4
  • Two options are avalible to use this bot, either with entering password or without fully secure no credentials are stored way.
  • Export all results and offers as txt and csv (PRO FEATURE) file
  • Export unanswered questions to txt file, enter answers there, next time bot will use these values
  • PRO FEATURE: Answer unasnwered questions with AI! Let AI answer easy apply jobs' questions.
  • Fully customizable job preferences (advanced filters, search filters)
  • Can be used for many job search websites such as Linkedin, Glassdoor, AngelCo, Greenhouse, Monster, GLobalLogic and Djinni.

To modify, use, get documentation or for you business enquiries kindly contact us via:
[email protected]

Or directly contact us from our website

Donation and Support πŸ₯³

With your support we build, update and work on this project. You can also purchase additional packages, tutorials and materials explaining how this bot is working.

There are several features and simplifications we'd like to add to this project. For that we need your support to cover costs. Your support is keeping this project alive.

Donate & support!

Purchase additional materials and guides 😍

You can currently, purchase full in depth detailed tutorial explaining how this bot is working, one hour booking session where i step by step build and run the bot on your machine or 5 videos showing how this can be used. To buy, support this project and help me add more features.

Installation πŸ”Œ

  • clone the repo git clone https://github.com/wodsuz/EasyApplyJobsBot
  • Make sure Python and pip is installed
  • Install dependencies with pip3 install -r requirements.yaml
  • Enter your linkedin credentials on line 8 and 9 of config.py file
  • Either create firefox Profile and put its path on line 8 of config.py or enter your linkedin credentials line 11 and 12 of config.py. - this feature is avalible currently only for Linkedin bot pro members)
  • Modify config.py according to your demands.
  • Run python3 linkedin.py
  • Check Applied Jobs DATA .txt file is generate under /data folder

Features πŸ’‘

  • Ability to filter jobs, by easy apply, by location (Worldwide, Europe, Poland, etc.), by keyword (python, react, node), by experience, position, job type and date posted.
  • Apply based on your salary preferance (works best for job offers from States)
  • Automatically apply single page jobs in which you need to send your up-to-date CV and contact.
  • Automatically apply more than one page long offers with the requirements saved in LinkedIn like experience, legal rights, resume etc.
  • Output the results in a data txt file where you can later work on.
  • Print the links for the jobs that the bot couldn’t apply for because of extra requirements. (User can manually apply them to optimize the bot)
  • Put time breaks in between functions to prevent threshold.
  • Automatically apply for jobs.
  • Automatically run in the background.
  • Compatible with Firefox and Chrome.
  • Runs based on your preferences.
  • Optional follow or not follow company upon successful application.
  • Much more!

Supported Platforms

Browser Mac Windows Linux-Ubuntu Note
Chrome βœ… βœ… βœ…
Firefox βœ… βœ… βœ… Only avalible for Pro version

Tests πŸ”¦

There is a specific test folder for you to test the dependencies, the bot and if everything is set up correctly. To do that I recommend, running below codes,

  1. Go to the tests folder run python3 setupTests.py this will output if Python,pip,selenium,dotenv and Firefox are installed correctly on your system.
  2. Run python3 seleniumTest.py this will output if the Selenium and gecko driver is able to retrieve data from a website. If it returns an error make sure you have correctly installed selenium and gecko driver
  3. Run python3 linkedinTest.py this will try to log in automatically to your Linkedin account based on the path you defined in the .env file. If its giving an error make sure the path exists and you created firefox profile, logged in manually to your Linkedin account once. Here is the result you should get after running test files, test1

How to Set up (long old way) πŸ› 

This tutorial briefly explains how to set up LinkedIn Easy Apply jobs bot. With few modifications you can make your own bot or try my other bots for other platforms.

  1. Install Firefox or Chrome. I was using Firefox for this so I will continue the usage of it on Firefox browser. Process would be similar on Chrome too.
  2. Install Python.
  3. Download Geckodriver put it in Python’s installation folder.
  4. Install pip, python get-pip.py
  5. Install selenium pip install selenium
  6. Clone the code
  7. Create a profile on Firefox, about:profiles
  8. Launch new profile, go Linkedin.com and log in your account
  9. Copy the root folder of your new profile, to do that type about:profiles on your Firefox search bar, copy the root folder C:---\your-profile-name.
  10. Paste the root folder on .env file
  11. Modify/adapt the code and run
  12. After each run check the jobs that the bot didn’t apply automatically, apply them manually by saving your preferences
  13. Next time the bot will apply for more jobs based on your saved preferences on Linkedin.
  14. Feel free to contact me for any update/request or question.

Demo πŸ–₯

banner 1 2 2022-09-11_18-08 2022-09-11_18-09

Free vs Pro version

Category Free Version Pro Version
Supported Browsers Chrome Firefox and Chrome
Headless(invisible) Browser ❌ βœ…
Login with Credentials βœ… βœ…
Auto login based on Firefox Profile ❌ βœ…
Filter offers based on job location βœ… βœ…
Filter offers based on keyword βœ… βœ…
Filter offers based on experience level βœ… βœ…
Filter offers based on date posted βœ… βœ…
Filter offers based on salary βœ… βœ…
Filter offers based on recent or relevent βœ… βœ…
Blacklist companies that you don't want to apply βœ… βœ…
Blacklist offer titles that you don't want to apply βœ… βœ…
Follow or unfollow companies after application βœ… βœ…
Output skipped questions in txt file for late application ❌ βœ…
Use AI to fill and answer skipped unanswered questions ❌ βœ…
Only Apply these companies feature ❌ βœ…
Only Apply titles having these keywords feature ❌ βœ…
Don't apply the job posted by the Hiring member ❌ βœ…
Only apply the job sposted by the Hiring member ❌ βœ…
Only apply jobs having less than x amount applications ❌ βœ…
Only apply jobs having these keywords in the job description ❌ βœ…
Dont't apply the jobs having these keywords in the job description ❌ βœ…
Apply companies having equal or more than employes ❌ βœ…
Only apply the ones linkedin is saying "you may be a goodfit" ❌ βœ…
Only apply the ones you have skilled badge ❌ βœ…
Save the jobs by pressing SAVE button before apply ❌ βœ…
Sent a message to the hiring manager once you apply for the role ❌ βœ…
List and output non Easy Apply jobs links ❌ βœ…
Check yes or no to all checkbox questions ❌ βœ…
Output file in txt format βœ… βœ…
Output file in csv(excel) format ❌ βœ…

Documentation

Automated Bots - Easy Apply Jobs Config file Settings Document

Frequently Asked Questions

How to install and run the bot?
To install the bot simply clone the repo, install required packages (these are dependencies making the bot run properly), enter your credentials & edit the config file based on your preferences and run the bot with the command python3 [thePlatformName].py

To run the bot you need Python (general-purpose programming language), Pip (package manager for Python), Selenium (for browser automation) and some dependencies to be installed on your device. For more information and details, you can check the installation of each project on their specific site shown below.
Instalization is too complicated can you make it easier?
Yes, we are trying to improve the process of instalization meanwhile you can purchase and use the step by step instalization tutorials to install the bot properly on your device
What are the features of these bots?
Currently automated bots hold 3 different subgroups under one umbrella. One for applying for jobs automatically, one for listing businesses automatically and one for swiping & messaging automatically in dating apps. You can check the features of each bot on the homepage and their own GitHub repository that I share and update regularly.
How much does it cost & how can I pay?
Each bot has a free and paid version. The free version comes with an open-source license that you can change & modify. For paid ones, you need to purchase coins and those coins will be deducted whenever the bot successfully acts (applying for jobs successfully, listing companies successfully or swiping & sending messages successfully). You can check our shop for the prices of each product.
Would i get banned or my account be blocked?
No, since you run the bot on your own device and the traffic is coming from your own address, the risks of getting banned from any of the websites we support is very low. This is because you run the bot on your own device, your traffic will be similar with your own actions and the bot will act humanely meaning it will perform stopping waiting and skipping actions randomly.Meanwhile we dont recommend applying more than 200 jobs per day via job apply bot.
I have an error while running the bot, how can i fix?
When you have an error related to any of the bots. Please check the github project first. Someone else also might post a similar error. Then if its free version try Google the error, if that doesn't work kindly contact with us with our contact page.
What are the terms and rules of using these bots?
The free version comes with an open source license. You are free to modify and work in any way you want. Paid version comes with limited license meaning that you accept and approve that you will be using the bot for you only and you won't modify/sell/commercialize or steal in any way
Linkedin pro bot will apply unanswered / additional questions?
Yes. Linkedin pro has several features for unanswered or additional questions. Firstly, it can answer a question based on Linkedin’s default value from previous applications of yours. Secondly, it can apply from a questions file - you need to add custom questions and answers in order for the bot to apply, thirdly AI can answer the questions for you.
Do you have a bot for x website?
We currently support the sites we sell in our shop. Please check our shop in order to see if we support or not. We constantly add and update the bot, in the future we will have social media accounts to provide you better and faster updates.

Future Implementations

Special Thanks

Special thanks to all the contributors who are constantly helping and keeping this repository active. Your contributions, whether they're bug reports, feature suggestions, or code improvements, are greatly appreciated. We couldn't do this without you!

easyapplyjobsbot's People

Contributors

gabrielgircenko avatar woddy123 avatar wodsuz 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

easyapplyjobsbot's Issues

Choose Resume Stopping Progress + Fix

Choose resume now seems to be enforced.
Best way I could find was to locate the CSS element. Update Line 185 to include two self.driver.find_element:

        for pages in range(applyPages-2):
            self.driver.find_element(By.CSS_SELECTOR,"button[aria-label='Choose Resume']").click()
            time.sleep(random.uniform(1, constants.botSpeed))

            self.driver.find_element(By.CSS_SELECTOR,"button[aria-label='Continue to next step']").click()
            time.sleep(random.uniform(1, constants.botSpeed))

Security Verfication

After Submiting Password, Verfication Window(Security Check) opens and hence

totalJobs = self.driver.find_element(By.XPATH,'//small').text

from here error starts coming (cant find element, as verfication window(Security Check) gets open up)).

simple solution- Can we introduce retry 2 times after every 60 seconds?
Benefits-

  1. For any unexpected additional popup, we can manage manually, and after that bot will retry again for next step without exiting.

Error choosing resume

Linkedin is asking for a summary after clicking to go to the next page.
This code may resolve the issue, in which case it will select the first resume it finds

self.driver.find_element(By.CSS_SELECTOR, "button[aria-label='Choose Resume']").click()

problem
image

When running: python3 linkedin.py I receive the following

❯ python3 linkedin.py
🌐 Bot will run in Chrome browser and log in Linkedin for you.
Traceback (most recent call last):
File "/Users/wilson/Desktop/EasyApplyJobsBot-main 2/linkedin.py", line 245, in
Linkedin().linkJobApply()
^^^^^^^^^^
File "/Users/wilson/Desktop/EasyApplyJobsBot-main 2/linkedin.py", line 15, in init
self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options=utils.chromeBrowserOptions())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.11/site-packages/selenium/webdriver/chrome/webdriver.py", line 80, in init
super().init(
File "/opt/homebrew/lib/python3.11/site-packages/selenium/webdriver/chromium/webdriver.py", line 104, in init
super().init(
File "/opt/homebrew/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 286, in init
self.start_session(capabilities, browser_profile)
File "/opt/homebrew/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 378, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 440, in execute
self.error_handler.check_response(response)
File "/opt/homebrew/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py", line 245, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot create default profile directory
Stacktrace:
0 chromedriver 0x0000000104f09670 chromedriver + 4298352
1 chromedriver 0x0000000104f01bbc chromedriver + 4266940
2 chromedriver 0x0000000104b34758 chromedriver + 280408
3 chromedriver 0x0000000104b5e258 chromedriver + 451160
4 chromedriver 0x0000000104b5a2c8 chromedriver + 434888
5 chromedriver 0x0000000104b58308 chromedriver + 426760
6 chromedriver 0x0000000104b98994 chromedriver + 690580
7 chromedriver 0x0000000104b98114 chromedriver + 688404
8 chromedriver 0x0000000104b622d0 chromedriver + 467664
9 chromedriver 0x0000000104b63354 chromedriver + 471892
10 chromedriver 0x0000000104ec96c4 chromedriver + 4036292
11 chromedriver 0x0000000104ecdc64 chromedriver + 4054116
12 chromedriver 0x0000000104ed42d8 chromedriver + 4080344
13 chromedriver 0x0000000104ece970 chromedriver + 4057456
14 chromedriver 0x0000000104ea58dc chromedriver + 3889372
15 chromedriver 0x0000000104eed25c chromedriver + 4182620
16 chromedriver 0x0000000104eed3b4 chromedriver + 4182964
17 chromedriver 0x0000000104efc0f4 chromedriver + 4243700
18 libsystem_pthread.dylib 0x000000019bbda06c _pthread_start + 148
19 libsystem_pthread.dylib 0x000000019bbd4e2c thread_start + 8

Issue with fix and optimization suggestion

Hi, I've been working on the same thing. I noticed you have a few issues I've encountered.

  1. Issue (critical): Some cities like "Łódź" that have special characters will cause the bot to crash when trying to write to the log file. As an easy fix you can just f.write(f'{text.encode("utf-8")} \n') in line 54 in utils file
  2. Issue (Optimization): You usually want to do time.sleep(X) After checking if you already applied to this job this will help a lot with time I think and not make the bot any more detectable. I just do one time.sleep(1) after self.driver.get(offerPage) and then add the other wait time inside the next if statement (if button is not False:)

Hope this is clear enough of an explanation :D

SyntaxError: invalid syntax while running the linkedin.py

root@LB-00000403:~/EasyApplyJobsBot# python3 linkedin.py
Traceback (most recent call last):
File "linkedin.py", line 2, in
import utils,constants,config
File "/root/EasyApplyJobsBot/utils.py", line 112
match job.casefold():
^
SyntaxError: invalid syntax

The bot is not working anymore with chrome crashes after 5 second

Hello there,

The bot was working fine for sometime and now it started to crash after logging in. It was working fine an I haven't changed anything in the code.

Here is the error code ( GetHandleVerifier [0x015C3B10+635936]
(No symbol) [0x014B4A1F]
(No symbol) [0x014BA418]
(No symbol) [0x014BA505]
(No symbol) [0x014C508B]
BaseThreadInitThunk [0x75110419+25]
RtlGetAppContainerNamedObjectPath [0x772C72FD+237]
RtlGetAppContainerNamedObjectPath [0x772C72CD+189]

Screenshot 2023-02-07 at 5 35 19 AM

DeprecationWarning:

I have been banging my head into the wall for a few hours now.
context - this is a Kali Linux VM on VMware on Windows10
ran requirements
installed/updated all packages including pip and python
tried credentials as well as profile string,
consistently this is the message I am getting:

python3 linkedin.py
Linux
[WDM] - Downloading: 19.0kB [00:00, 15.7MB/s]
/usr/EasyApplyJobsBot/linkedin.py:25: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
self.driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
Traceback (most recent call last):
File "/usr/EasyApplyJobsBot/linkedin.py", line 227, in
Linkedin().linkJobApply()
File "/usr/EasyApplyJobsBot/linkedin.py", line 25, in init
self.driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
File "/usr/local/lib/python3.10/dist-packages/selenium/webdriver/firefox/webdriver.py", line 168, in init
self.service = Service(
File "/usr/local/lib/python3.10/dist-packages/selenium/webdriver/firefox/service.py", line 49, in init
log_file = open(log_path, "a+", encoding='utf-8') if log_path else None
PermissionError: [Errno 13] Permission denied: 'geckodriver.log'

I am not much of a coder so it is probably something simple I dont understand fundamentally.

for test.py I get:

β„Ή This script will check if the bot can automatically log in Linkedin for you.
βœ… Python is succesfully installed!
βœ… Pip is succesfully installed!
βœ… Selenium is succesfully installed!
βœ… Firefox is succesfully installed!
Traceback (most recent call last):
File "/usr/EasyApplyJobsBot/test.py", line 90, in
checkSeleniumLinkedin()
File "/usr/EasyApplyJobsBot/test.py", line 61, in checkSeleniumLinkedin
browser = webdriver.Firefox(options=options)
File "/usr/local/lib/python3.10/dist-packages/selenium/webdriver/firefox/webdriver.py", line 168, in init
self.service = Service(
File "/usr/local/lib/python3.10/dist-packages/selenium/webdriver/firefox/service.py", line 49, in init
log_file = open(log_path, "a+", encoding='utf-8') if log_path else None
PermissionError: [Errno 13] Permission denied: 'geckodriver.log'

Would love a solution!

Cannot apply to this Job!

Hello, I am currently using the tool and I find it great so I will make a donation thank you very much, but I do not understand why I have announcements that I cannot answer...
in fact he browses the ads but he only really responds to 1 out of 5 ads.

Is that still works? The bot stops without do any apply

The bot stops without do any apply:

PS C:\LinkedinApplyBot\EasyApplyJobsBot> python3 linkedin.py
🌐 Bot will run in Chrome browser and log in Linkedin for you.

DevTools listening on ws://127.0.0.1:61930/devtools/browser/a26b20ab-1b34-420f-bbdd-9ac9e01ce0f5
[8360:13888:1123/215811.597:ERROR:gl_utils.cc(402)] [.WebGL-00006B4000BF0D00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[8360:13888:1123/215811.681:ERROR:gl_utils.cc(402)] [.WebGL-00006B4001D80E00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
πŸ”„ Trying to log in linkedin...
❌ Couldn't log in Linkedin by using Chrome. Please check your Linkedin credentials on config files line 7 and 8. If error continue you can define Chrome profile or run the bot on Firefox
βœ… Urls are created successfully, now the bot will visit those urls.
[8360:13888:1123/215812.949:ERROR:gl_utils.cc(402)] [.WebGL-00006B4005FB5C00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels

Category: blazor, Location: Europe, Applying 21 resultados jobs.
[8360:13888:1123/215814.179:ERROR:gl_utils.cc(402)] [.WebGL-00006B4001D83800]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels (this message will no longer repeat)
⚠️ Warning in getting jobCompany: Message: no such element: Unable to locate element
⚠️ Warning in getting jobPostedDate: Message: no such element: Unable to locate element
⚠️ Warning in getting jobApplications: Message: no such element: Unable to locate element
Traceback (most recent call last):
File "C:\LinkedinApplyBot\EasyApplyJobsBot\linkedin.py", line 245, in
Linkedin().linkJobApply()
File "C:\LinkedinApplyBot\EasyApplyJobsBot\linkedin.py", line 92, in linkJobApply
button.click()
File "C:\Users\iurib\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\selenium\webdriver\remote\webelement.py", line 93, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\Users\iurib\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\selenium\webdriver\remote\webelement.py", line 394, in _execute
return self._parent.execute(command, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\iurib\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\selenium\webdriver\remote\webdriver.py", line 347, in execute
self.error_handler.check_response(response)
File "C:\Users\iurib\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: chrome=119.0.6045.160)
Stacktrace:
GetHandleVerifier [0x006B72A3+45731]
(No symbol) [0x00642D51]
(No symbol) [0x005386D0]
(No symbol) [0x0056CAC4]
(No symbol) [0x00564FC0]
(No symbol) [0x00587FDC]
(No symbol) [0x00564A4E]
(No symbol) [0x00588254]
(No symbol) [0x0059B7A2]
(No symbol) [0x00587DD6]
(No symbol) [0x005631F6]
(No symbol) [0x0056439D]
GetHandleVerifier [0x009C0716+3229462]
GetHandleVerifier [0x00A084C8+3523784]
GetHandleVerifier [0x00A0214C+3498316]
GetHandleVerifier [0x00741680+611968]
(No symbol) [0x0064CCCC]
(No symbol) [0x00648DF8]
(No symbol) [0x00648F1D]
(No symbol) [0x0063B2C7]
BaseThreadInitThunk [0x763B7BA9+25]
RtlInitializeExceptionChain [0x7774BD2B+107]
RtlClearBits [0x7774BCAF+191]

PS C:\LinkedinApplyBot\EasyApplyJobsBot>

Setup errors (and how to solve some)

Im on windows and am portuguese speaker and usually programmer things aren't done for it, but anyway if it's mean't to work on it it is not, for it to run i had to do these steps:

  • everywhere you want it to run comment this line -> options.add_argument("--disable-blink-features=AutomationControlled")
  • geckodriver must be on PATH variables
  • LinkedIn must be set to English

Still, in some applications it's throwing stale element
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: button[aria-label='Submit application'] Stacktrace: RemoteError@chrome://remote/content/shared/RemoteError.jsm:12:1 WebDriverError@chrome://remote/content/shared/webdriver/Errors.jsm:192:5 NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.jsm:404:5 element.find/</<@chrome://remote/content/marionette/element.js:291:16
It's aparently looking for submit button while in review page, maybe change the buttons to not have a strict number of uses, using selenium wait, etc, may help. will try that

Additional Questions

hello, I'm wondering how you will apply for the jobs that require Additional Questions.

Selenium stealth missing from windows version

Exception in thread Thread-1 (startSelenium):
Traceback (most recent call last):
File "threading.py", line 1052, in bootstrap_inner
File "threading.py", line 989, in run
File "LinkedinPro.py", line 910, in startSelenium
File "LinkedinPro.py", line 39, in init
File "LinkedinPro.py", line 125, in connectBrowser
File "selenium_stealth_init
.py", line 45, in stealth
File "selenium_stealth\utils.py", line 8, in with_utils
File "pathlib.py", line 1028, in read_text
File "pathlib.py", line 1014, in open
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\steph\Downloads\LinkedinProWindows\LinkedinPro\_internal\selenium_stealth\js\utils.js'

Cv not uploaded or fetched from profile

there is no option in config file to upload cv from the drive or use the cv from the LinkedIn account, and so the app fails to apply to any job that requires cv.

Selenium can't find chrome binary

I've been working on debugging this for a few days now. Selenium and Chrome are both updated to the most recent versions, which should be compatible with each other. The steps I've followed in debugging this so far are as follows.

  1. Ensure that chrome is actually installed.
  2. Delete and reinstall google-chrome as well as selenium to ensure newest versions
  3. Check that the correct version of chrome-driver is being used. The LinkedIn.py file uses ChromeDriverManager which should automatically handle matching the version of ChromeDriver with the installed Chrome browser, so this should not be an issue.
  4. Adding the "update=True" flag to line 15 of LinkedIn.py, i.e., line 15 become
    self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install(update=True)),options=utils.chromeBrowserOptions())
    This is just an insurance policy to force ChromeDriverManager to delete the existing driver and download the latest version.

Bot ignoring new questions added in 'CheckboxConfig.yaml'

Hi,

First, great job.

Issue:
Bot seems to ignore my additions. Am I missing something? Thanks.

What am I doing?
Trying to add new responses to some questions like below:

  # Do you currently live in Canada?
  Live in Canada: "No"

  # How many years of experience with ERP Software?  
  ERP Software: "12"

Added these responses in

  • checkboxconfig (did not work hence also added in inputFieldConfig.yaml) but the issue persists.

Example:
Two questions above appear as drop down boxes on third page of this job post.
https://www.linkedin.com/jobs/view/3370021176

A resume is required

When applying i am getting A resume is required message, if i click "Chose" it can move forward is anyone else facing this? is it possible im applying to too many jobs? Another similar job bot fixes this by uploading a resume for each application.
image

mechanism to retain sign in information

Hi, I was using this script to apply for different jobs but it's really difficult to see login page repeatedly for each run. I have created a PR (#54). This helps the script to retain the cookies/session information after the initial login and then re-uses that session for subsequent script launches.

self.saveCookies() issue

I have this error, it does the login then it is stuck in the main screen until it closes.
This is the log in the console.
←[93mπŸ€– Thanks for using Easy Apply Jobs bot, for more information you can visit our site - www.automated-bots.com←[00m
←[93m🌐 Bot will run in Chrome browser and log in Linkedin for you.←[00m

DevTools listening on ws://127.0.0.1:62505/devtools/browser/117d1d49-02dc-411c-97ef-b6efcccef074
[14208:8144:1227/110847.132:ERROR:gl_utils.cc(412)] [.WebGL-00001F9402089C00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[14208:8144:1227/110848.169:ERROR:gl_utils.cc(412)] [.WebGL-00001F9400F8E200]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[14208:8144:1227/110848.502:ERROR:gl_utils.cc(412)] [.WebGL-00001F940208B800]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[14208:8144:1227/110848.581:ERROR:gl_utils.cc(412)] [.WebGL-00001F9402868000]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels (this message will no longer repeat)
πŸ”„ Trying to log in Linkedin...
Traceback (most recent call last):
File "C:\Users\Samuel\Desktop\Proyectos\Nueva carpeta\EasyApplyJobsBot\linkedin.py", line 258, in
Linkedin().linkJobApply()
File "C:\Users\Samuel\Desktop\Proyectos\Nueva carpeta\EasyApplyJobsBot\linkedin.py", line 33, in init
self.saveCookies()
File "C:\Users\Samuel\Desktop\Proyectos\Nueva carpeta\EasyApplyJobsBot\linkedin.py", line 48, in saveCookies
pickle.dump(self.driver.get_cookies() , open(self.cookies_path,"wb"))
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\Samuel\Desktop\Proyectos\Nueva carpeta\EasyApplyJobsBot\cookies/4d7c7a2dec216a5fda3c21df674d3eaa.pkl'

SyntaxError: invalid syntax for ` match job.casefold():`

Steps to reproduce:

pip3 install -r requirements.yaml

then

python3 linkedin.py

Traceback (most recent call last):
File "linkedin.py", line 2, in
import utils,constants,config
File "/Users/ishandutta2007/Documents/Projects/EasyApplyJobsBot/utils.py", line 115
match job.casefold():
^
SyntaxError: invalid syntax

I am on python 3.8.0

Bot cannot apply to Jobs, cannot select Phone Country Code

Describe the bug

  • Linked provides a dropdown "Phone Country Code" before we enter our phone number.
  • bot can not selects anything from dropdown and hence cannot apply to jobs

Screenshots
Attached snip.JPG

Logs
If applicable, attach your logs file found in ./logs/

Desktop (please complete the following information):

  • OS: [e.g. iOS]
    snip

  • Browser [e.g. chrome, safari]

To Reproduce
Steps to reproduce the behavior:

config.yaml
username: <>
password: <>
phone_number: <>

positions:
- Senior Software Engineer

locations:
- Remote
  • Run easyapplybot.py
$ python easyapplybot.py
16:44:22 - INFO - Looking for jobs.. Please wait..
16:44:50 - INFO - Lock avoided.
16:45:11 - INFO - Looking for jobs.. Please wait..
16:45:11 - INFO - 599.0 minutes left in this search
16:45:11 - DEBUG - Sleeping for 3.7
16:46:04 - INFO - Clicking the EASY apply button
16:46:18 - INFO - Could not complete submission
16:46:20 - INFO -
Position 1:
 (4) Programador/a Senior C++ para proyecto de Defensa y Seguridad | Indra | LinkedIn
 * has Easy Apply Button

16:46:39 - INFO - Clicking the EASY apply button
16:46:53 - INFO - Could not complete submission
16:46:56 - INFO -

Expected behavior
Bot should apply to job

Bot Skips Application After Uploading CV

As soon as the bot gets passed the upload CV part, the bot skips and continues to another application.

No error message were returned so heres a screen rec of the behaviour:

ezgif com-video-to-gif

Steps to reproduce:

  • Given: the user is on the application process
  • When: the user clicks passed the upload CV
  • And: the user is on the 'work experience' section of the application process.
  • Then: The bot skips the current application and moves onto the next.

Expected Results:

  • The bot should click next & submit application.

Actual Results:

  • The bot returns the following ''Cannot apply to this Job!"

Code:
`def linkJobApply(self):
self.generateUrls()
countApplied = 0
countJobs = 0

    urlData = utils.getUrlDataFile()

    for url in urlData:        
        self.driver.get(url)

        driver = webdriver.Chrome()
        wait = WebDriverWait(driver, 10)
        totalJobs = self.driver.find_element(By.XPATH,'//small').text
        totalPages = utils.jobsToPages(totalJobs)

        urlWords =  utils.urlToKeywords(url)
        lineToWrite = "\n Category: " + urlWords[0] + ", Location: " +urlWords[1] + ", Applying " +str(totalJobs)+ " jobs."
        self.displayWriteResults(lineToWrite)

        for page in range(totalPages):
            currentPageJobs = constants.jobsPerPage * page
            url = url +"&start="+ str(currentPageJobs)
            self.driver.get(url)
            time.sleep(random.uniform(1, constants.botSpeed))

            offersPerPage = self.driver.find_elements(By.XPATH,'//li[@data-occludable-job-id]')
            offerIds = []

            time.sleep(random.uniform(1, constants.botSpeed))

            for offer in offersPerPage:
                offerId = offer.get_attribute("data-occludable-job-id")
                offerIds.append(int(offerId.split(":")[-1]))

            for jobID in offerIds:
                offerPage = 'https://www.linkedin.com/jobs/view/' + str(jobID)
                self.driver.get(offerPage)
                time.sleep(random.uniform(1, constants.botSpeed))

                countJobs += 1

                jobProperties = self.getJobProperties(countJobs)
                if "blacklisted" in jobProperties:             
                    lineToWrite =  "\n" + "\n" + jobProperties + "\n" + "⚫️ Blacklisted Job, skipped!: " +str(offerPage)
                    self.displayWriteResults(lineToWrite)
                
                else :                    
                    button = self.easyApplyButton()

                    if button is not False:
                        button.click()
                        time.sleep(random.uniform(1, constants.botSpeed))
                        countApplied += 1
                        try:
                            self.chooseResume()
                            self.driver.find_element(By.NAME, "button[aria-label='Submit application']").click()
                            time.sleep(random.uniform(1, constants.botSpeed))

                            lineToWrite = "\n" + "\n" + jobProperties + "\n" + "βœ… Just Applied to this job: "  +str(offerPage)
                            self.displayWriteResults(lineToWrite)

                        except:
                            try:
                                self.driver.find_element(By.CSS_SELECTOR,"button[aria-label='Continue to next step']").click()
                                time.sleep(random.uniform(1, constants.botSpeed))

                                comPercentage = self.driver.find_element(By.XPATH,'html/body/div[3]/div/div/div[2]/div/div/span').text
                                percenNumber = int(comPercentage[0:comPercentage.index("%")])
                                result = self.applyProcess(percenNumber,offerPage)
                                lineToWrite = jobProperties + " | " + result
                                self.displayWriteResults(lineToWrite)
                            
                            except Exception as e: 
                                self.chooseResume()
                                lineToWrite = "\n" + "\n" + jobProperties + "\n" + "πŸ”΄ Cannot apply to this Job! " +str(offerPage)
                                self.displayWriteResults(lineToWrite)
                    else:
                        lineToWrite = "\n" + "\n" + jobProperties + "\n" + "πŸ”΅ Already applied to this Job: " +str(offerPage)
                        self.displayWriteResults(lineToWrite)


        prYellow("Category: " + urlWords[0] + "," +urlWords[1]+ " applied: " + str(countApplied) +
              " jobs out of " + str(countJobs) + ".")
    
    utils.donate(self)`

Continues to apply to blacklisted

When I add words to the blacklisted it still continues to apply to those jobs.
I checked the functions inside of linkedin.py but there is nothing that prevents blacklisted titles from being applied to. Any fixes for this?

Getting a firefox options error

`PS D:\GitHub\Hobbies\EasyApplyJobsBot> python linkedin.py
Traceback (most recent call last):
File "D:\GitHub\Hobbies\EasyApplyJobsBot\linkedin.py", line 227, in
Linkedin().linkJobApply()
File "D:\GitHub\Hobbies\EasyApplyJobsBot\linkedin.py", line 36, in init
self.driver = webdriver.Firefox(options=utils.browserOptions(),service=Service(executable_path=GeckoDriverManager().install()))
File "D:\GitHub\Hobbies\EasyApplyJobsBot\utils.py", line 22, in browserOptions
options.add_argument(firefoxProfileRootDir)
File "C:\Users\georg\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\common\options.py", line 252, in add_argument
raise ValueError('argument can not be null')
ValueError: argument can not be null
image

PS D:\GitHub\Hobbies\EasyApplyJobsBot> `

ModuleNotFoundError: No module named 'pytransform'

hi, im running into this error when trying to run the pro linkedin script:
(.venv) ; python linkedinPro.py
Traceback (most recent call last):
File "/Users/joaorafael/dev/other/EasyApplyJobsBot/linkedinPro.py", line 1, in
from pytransform import pyarmor_runtime
ModuleNotFoundError: No module named 'pytransform'

I ran the pyarmor gen to create pytransform dir but no luck so far. any docs on how to set it up?
tried with both py3.11 and 3.10

Could you help me please?

ython3 linkedin.py
/home/andre/codigo/EasyApplyJobsBot/linkedin.py:13: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
self.driver = webdriver.Chrome(ChromeDriverManager().install())
Trying to log in linkedin.
Couldnt log in Linkedin.
Urls are created successfully, now the bot will visit those urls.
Traceback (most recent call last):
File "/home/andre/codigo/EasyApplyJobsBot/linkedin.py", line 214, in
Linkedin().linkJobApply()
File "/home/andre/codigo/EasyApplyJobsBot/linkedin.py", line 51, in linkJobApply
totalPages = utils.jobsToPages(totalJobs)
File "/home/andre/codigo/EasyApplyJobsBot/utils.py", line 51, in jobsToPages
totalJobs_int = int(totalJobs.replace(',', ''))
ValueError: invalid literal for int() with base 10: '32.079'
andre@andre-pc:~/codigo/EasyApplyJobsBot$

Webdriver closes upon login

<img width="1049" alt="Screenshot 2023-06-13 at 16 35 21"

seems to be something to do with line 54 'totalJobs = self.driver.find_element(By.XPATH,'//small').text'

Screenshot 2023-06-13 at 16 35 21

Does not apply to any job

I am getting
Warning in getting jobApplications: Message: no such element: Unable to locate element
in all job adds

UnicodeEncodeError: 'gbk' codec can't encode character '\U0001f916'

I am using windows OS and the system throw this error message:

File "...\EasyApplyJobsBot\linkedin.py", line 258, in
Linkedin().linkJobApply()

File "...\EasyApplyJobsBot\linkedin.py", line 13, in init
utils.prYellow("\U0001f916 Thanks for using Easy Apply Jobs bot, for more information you can visit our site - www.automated-bots.com")
File "...\EasyApplyJobsBot\utils.py", line 36, in prYellow
print(f"\033[93m{prt}\033[00m")
UnicodeEncodeError: 'gbk' codec can't encode character '\U0001f916' in position 5: illegal multibyte sequence

The system default enconder is utf-8. Is there a way to fix this issue? Thanks!

selenium.common.exceptions.WebDriverException: Message: unknown error: cannot create default profile directory

I have upgrade my python and pip, and after I run python3.10 linkedin.py this is error that I received. Please advice on anysteps I am missing or how can I fix this issue. Thank you so much!

python3.10 linkedin.py
🌐 Bot will run in Chrome browser and log in Linkedin for you.
[WDM] - Downloading: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 8.04M/8.04M [00:00<00:00, 13.7MB/s]
Traceback (most recent call last):
File "/Users/myu/Desktop/github/EasyApplyJobsBot/linkedin.py", line 245, in
Linkedin().linkJobApply()
File "/Users/myu/Desktop/github/EasyApplyJobsBot/linkedin.py", line 15, in init
self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options=utils.chromeBrowserOptions())
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 80, in init
super().init(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 104, in init
super().init(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 286, in init
self.start_session(capabilities, browser_profile)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 378, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 440, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 245, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot create default profile directory
Stacktrace:
0 chromedriver 0x0000000104e4d670 chromedriver + 4298352
1 chromedriver 0x0000000104e45bbc chromedriver + 4266940
2 chromedriver 0x0000000104a78758 chromedriver + 280408
3 chromedriver 0x0000000104aa2258 chromedriver + 451160
4 chromedriver 0x0000000104a9e2c8 chromedriver + 434888
5 chromedriver 0x0000000104a9c308 chromedriver + 426760
6 chromedriver 0x0000000104adc994 chromedriver + 690580
7 chromedriver 0x0000000104adc114 chromedriver + 688404
8 chromedriver 0x0000000104aa62d0 chromedriver + 467664
9 chromedriver 0x0000000104aa7354 chromedriver + 471892
10 chromedriver 0x0000000104e0d6c4 chromedriver + 4036292
11 chromedriver 0x0000000104e11c64 chromedriver + 4054116
12 chromedriver 0x0000000104e182d8 chromedriver + 4080344
13 chromedriver 0x0000000104e12970 chromedriver + 4057456
14 chromedriver 0x0000000104de98dc chromedriver + 3889372
15 chromedriver 0x0000000104e3125c chromedriver + 4182620
16 chromedriver 0x0000000104e313b4 chromedriver + 4182964
17 chromedriver 0x0000000104e400f4 chromedriver + 4243700
18 libsystem_pthread.dylib 0x00000001939ac26c _pthread_start + 148
19 libsystem_pthread.dylib 0x00000001939a708c thread_start + 8

Profile being deprecated and problem with find_element_by_xpath

Hello. Can you help me? I'm getting these 2 errors.

C:\Users\User\Downloads\LinkedinEasyApplyJobsBot-main\LinkedinEasyApplyJobsBot-main\linkedineasyapplyjobs.py:9: DeprecationWarning: firefox_profile has been deprecated, please use an Options object
  linkprofile = webdriver.FirefoxProfile('C:/Users/User/AppData/Roaming/Mozilla/Firefox/Profiles/h71am03i.Linkedin')
C:\Users\User\Downloads\LinkedinEasyApplyJobsBot-main\LinkedinEasyApplyJobsBot-main\linkedineasyapplyjobs.py:10: DeprecationWarning: firefox_profile has been deprecated, please pass in an Options object
  self.driver = webdriver.Firefox(linkprofile)
Traceback (most recent call last):
  File "C:\Users\User\Downloads\LinkedinEasyApplyJobsBot-main\LinkedinEasyApplyJobsBot-main\linkedineasyapplyjobs.py", line 138, in <module>
    ed.Link_job_apply()
  File "C:\Users\User\Downloads\LinkedinEasyApplyJobsBot-main\LinkedinEasyApplyJobsBot-main\linkedineasyapplyjobs.py", line 25, in Link_job_apply
    numofjobs = self.driver.find_element_by_xpath(
AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'

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.