Giter Site home page Giter Site logo

wodsuz / easyapplyjobsbot Goto Github PK

View Code? Open in Web Editor NEW
391.0 15.0 132.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 People

Contributors

gabegiro 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  avatar

easyapplyjobsbot's Issues

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

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

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!

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

OSError: [WinError 193] %1 is not a valid Win32 application

Bot was working perfectly yesterday, but today throws this error, has anyone else come across this and how did you fix it?:

Traceback (most recent call last):
File "C:\Users\xx\Documents\EasyApplyJobsBot-main\linkedin.py", line 248, in
Linkedin().linkJobApply()
^^^^^^^^^^
File "C:\Users\xx\Documents\EasyApplyJobsBot-main\linkedin.py", line 15, in init
self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options=utils.chromeBrowserOptions())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 45, in init
super().init(
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 50, in init
self.service.start()
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\common\service.py", line 98, in start
self._start_process(self._path)
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\common\service.py", line 208, in _start_process
self.process = subprocess.Popen(
^^^^^^^^^^^^^^^^^
File "C:\Users\x\AppDxata\Local\Programs\Python\Python311\Lib\subprocess.py", line 1022, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\xx\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 1491, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [WinError 193] %1 is not a valid Win32 application

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

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

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!

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

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

readme still mentions old testing code

the readme section "Tests πŸ”¦" refers to the tests folder which was removed in commit 3498470 on Sep 23, 2022 and replaced with a single file which was removed in commit 405d258 on Nov 29, 2023

Might it be a good idea to do a full review of the readme as there may be other errors?

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

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'

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

Message: stale element reference: stale element not found in the current frame

Traceback (most recent call last):
File "C:\Users\jtset\Desktop\EasyApplyJobsBot\linkedin.py", line 260, in
Linkedin().linkJobApply()
File "C:\Users\jtset\Desktop\EasyApplyJobsBot\linkedin.py", line 35, in init
self.linkJobApply()
File "C:\Users\jtset\Desktop\EasyApplyJobsBot\linkedin.py", line 98, in linkJobApply
offerIds = [(offer.get_attribute(
File "C:\Users\jtset\Desktop\EasyApplyJobsBot\linkedin.py", line 98, in
offerIds = [(offer.get_attribute(
File "C:\Users\jtset\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webelement.py", line 172, in get_attribute
attribute_value = self.parent.execute_script(
File "C:\Users\jtset\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 491, in execute_script
return self.execute(command, {
File "C:\Users\jtset\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 428, in execute
self.error_handler.check_response(response)
File "C:\Users\jtset\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: stale element not found in the current frame
(Session info: chrome=126.0.6478.127)
Stacktrace:
GetHandleVerifier [0x00B1C1C3+27395]
(No symbol) [0x00AB3DC4]
(No symbol) [0x009B1B7F]
(No symbol) [0x009B6C7F]
(No symbol) [0x009B8B7F]
(No symbol) [0x00A2D51B]
(No symbol) [0x00A1399C]
(No symbol) [0x00A2CB24]
(No symbol) [0x00A13736]
(No symbol) [0x009E7541]
(No symbol) [0x009E80BD]
GetHandleVerifier [0x00DD3A93+2876371]
GetHandleVerifier [0x00E27F5D+3221661]
GetHandleVerifier [0x00B9D634+556916]
GetHandleVerifier [0x00BA474C+585868]
(No symbol) [0x00ABCE04]
(No symbol) [0x00AB9818]
(No symbol) [0x00AB99B7]
(No symbol) [0x00AABF0E]
BaseThreadInitThunk [0x74F5FA29+25]
RtlGetAppContainerNamedObjectPath [0x76F475F4+228]
RtlGetAppContainerNamedObjectPath [0x76F475C4+180]

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.

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

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

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.

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'

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)`

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

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'

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.

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$

Speed Concern

Cool bot!! I'm curious what speed we currently should be expecting, I'm wondering if I have a speed issue on my end. I seem to apply to one job every few minutes, compared to the demo video showcasing speeds of like a few per minute. Is this to be expected to circumvent the bot detection?

Thanks!

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

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.

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

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

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.

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

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>

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?

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.