GithubHelp home page GithubHelp logo

linkedin-easy-apply-bot's Introduction

Linkedin EasyApply Bot

Automate the application process on LinkedIn

Medium Write-up: https://medium.com/xplor8/how-to-apply-for-1-000-jobs-while-you-are-sleeping-da27edc3b703 Video: https://www.youtube.com/watch?v=4R4E304fEAs

Setup

Python 3.10 using a conda virtual environment on Linux (Ubuntu)

The run the bot install requirements

pip3 install -r requirements.txt

Enter your username, password, and search settings into the config.yaml file

username: # Insert your username here
password: # Insert your password here
phone_number: #Insert your phone number

positions:
- # positions you want to search for
- # Another position you want to search for
- # A third position you want to search for

locations:
- # Location you want to search for
- # A second location you want to search in 

salary: #yearly salary requirement 
rate: #hourly rate requirement 

uploads:
 Resume: # PATH TO Resume 
 Cover Letter: # PATH TO cover letter
 Photo: # PATH TO photo
# Note file_key:file_paths contained inside the uploads section should be written without a dash ('-') 

output_filename:
- # PATH TO OUTPUT FILE (default output.csv)

blacklist:
- # Company names you want to ignore

NOTE: AFTER EDITING SAVE FILE, DO NOT COMMIT FILE

Uploads

There is no limit to the number of files you can list in the uploads section. The program takes the titles from the input boxes and tries to match them with list in the config file.

Execute

To execute the bot run the following in your terminal

python3 easyapplybot.py

linkedin-easy-apply-bot's People

Contributors

aminblm avatar ba2512005 avatar danparizher avatar espadaser avatar fernando-granco avatar krapes avatar luunarmouse avatar mikedrones avatar mwargan avatar nicolomantini avatar nmpereira avatar pandreew avatar ronnieotieno avatar saiteja129 avatar stevenzhuqy avatar tkmawarire avatar vadimstasiev avatar ziyouxie0103 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

linkedin-easy-apply-bot's Issues

selenium.common.exceptions.NoSuchElementException

Hi Nicolo, appreciate your code. When running quickstart.py or easyapplybot.py directly there seems to be a selenium.common.exceptions.NoSuchElementException. Attaching a screenshot of the issue. Your input would be appreciated. Thanks.
Capture

Job search closes out abruptly

Hi,

First of all I would like to thank the inventors of this tool. It does an amazing job at applying to Easy Apply jobs on LinkedIn.

My first run went pretty well. However, in my second run I noticed the following:

  1. It was throwing the output text 3 times.
  2. After applying to jobs on the first page, it closed the browser.

In the third run, it took the job ids from "output.csv" and again closed out before moving to the next page for making further applications.

I had used one location and one position in my second and third run. Please let me know if the code is incorrect somewhere or I am not running the bot correctly.

P.S. It ran very well in its first run with 3 positions and 3 locations. I was able to apply to about 57 jobs.

Regards,
RushilYo

Issue when finding job

Hi,

Thank you so much for this tool. However, when i try to run it, it does not apply to any jobs. this is the screenshot of the error https://imgur.com/DiUv0aS

May I know how can I fix this? This is a really useful tool

Thank you

Not running

Describe the bug
When i try to run the file it gives me Assertion error
Screen Shot 2022-02-20 at 7 31 43 PM

Desktop (please complete the following information):

  • OS: MACOS
  • Browser Chrome
  • Version 98.0.4758.102

Unable to answer "additional questions" during application

Some job applications have "additional questions" at the end of the application that are required before submitting the application. These questions are seemingly standardized and should be able to be answered generically.
Examples of questions:

  • How many years of experience do you have in X
  • Do you require sponsorship to work in the United States
  • Are you legally authorized to work in the United States

Please assign this issue to me, as I am already working on this. (if you wouldnt mind :) )@nicolomantini

Heroku Support to automate the bot.

Hey Guys! I'm trying to move this python script to Heroku to automate the bot even further. I'm facing some issues with that.

If the team thinks its a good enhancement feature, I can share my script code and the issues I'm facing.

Thanks!

When searching for position, it only accepts the first letter

Job search for Embedded Software Engineer, but it only searched for 'E'

def start_apply(self): #self.wait_for_login() self.fill_data() #for position in self.positions: # for location in self.locations: print(f"Applying to {position}: {location}") #location = "&location=" + location self.applications_loop(position, location) self.finish_apply()

For a temp fix, I commented out the commented out lines above.

Cannot apply any job

It doesn't find submit button.
Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[contains(text(), 'Submit application')]"}

Timeout Exception

Team!

I'm seeing the following error: (Screenshot Attached)

Screen Shot 2020-07-31 at 11 29 46 PM

Also, I have noticed while applying jobs - the bot searches and skips the job postings without Easy Apply. Once it reaches a job with Easy Apply it applies for that job and throws this error.

Please Advice.

send_resume state machine

We need to add a state machine to the application window that the send_resume function handles.

This is an output of the pull request #30

Adding support for additional questions


name: feature request
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''


Describe the feature
As nobody wants to get banned on their original 500+ connection accounts, I assume everyone here is going to create a new account that will duplicate your main and use bot with that.
Now,
The bot works perfectly for basic easy apply but when there are other questions like experience in X, Y on a new account, it skips the posting completely. I suggest we add a simple counting mechanism to the bot for like the first 20 successful applications until which it will pause until info is entered instead of skipping. More like a learning curve for the account.
OR
add a pause function to the bot so that we enter the additional details and then resume.

Screenshots
N/A

Logs
https://pastebin.com/CxY75Hq0

Error Statement
N/A

Desktop (please complete the following information):

  • OS: Windows 10
  • Browser: Chrome
  • Version: Version 84.0.4147.105 (Official Build) (64-bit)

To Reproduce
Steps to reproduce the behavior:

  1. Start the bot
  2. Wait for a position with additional questions to show up
  3. bot skips if any additional question is not pre-filled.

Expected behavior
The bot should allow some way to provide additional question answers.

Additional context
N/A

It doesnt work, it log on Linkedin but i cant apply

I have a few issues running the script.

  1. I can't properly login, I fill the form with the correct e-mail and password, but somehow the script fill the form with less characters in password field (I had to harcode the password in the script to work).
  2. It doesnt work with Portuguese, it opens the position page and it doesnt click apply "Enviar Candidatura", it does the same in all positions.

Company names with special characters crash the program.

As the title says. When writing to the CSV file it fails, please implement a skip or try to convert characters to ascii.

Traceback (most recent call last): File "easyapplybot.py", line 450, in <module> bot.start_apply(positions, locations) File "easyapplybot.py", line 133, in start_apply self.applications_loop(position, location) File "easyapplybot.py", line 236, in applications_loop self.write_to_file(button, jobID, self.browser.title, result) File "easyapplybot.py", line 275, in write_to_file writer.writerow(toWrite) File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.496.0_x64__qbz5n2kfra8p0\lib\encodings\cp1252.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode character '\u0113' in position 49: character maps to <undefined>

Problem in submitting the application.

Your code works very well throughout. Thank you for that. I am just facing one issue i.e when the bot opens the easy apply job application ,it skips to submit.Can you please help me fixing this issue? I am using python3.7 version and I have changed these lines of code:
pyautogui.moveTo(x+200, 0, duration=1.0)
pyautogui.moveTo(x, 0, duration=0.5)

instead of None I have replaced it with None.Everything else is just the same.Please help.
Thanks!

necessary enhancement !!

First of all thank you for this amazon bot :)
i just need to clarify some enhancement need to be implemented such as
Questions asked during submitting easy apply like

  • How many years of experience do you have with [role such as Cybersecurity]?
  • Are you legally authorized to work in [country name]?
  • Will you now or in the future require sponsorship for employment visa status ?

those questions is flexible and 50% of applications i saw those questions are included
so is there anyway to include theme in config.yaml or even give the user the ability to include any questions by adding them to
config file and wildcard the rest of question as following .
Are you legally authorized to work in [*]?

Thank you

Bot crashes for companies with accented characters in their names (apparently)

Describe the bug
Bot crashes for Companies with accented characters in their names (apparently)

Screenshots
image
https://www.linkedin.com/jobs/view/2555256306/

Error Statement

Traceback (most recent call last):
  File "C:\Users\(username)\IdeaProjects\LinkedIn-Easy-Apply-Bot\easyapplybot.py", line 450, in <module>
    bot.start_apply(positions, locations)
  File "C:\Users\(username)\IdeaProjects\LinkedIn-Easy-Apply-Bot\easyapplybot.py", line 133, in start_apply
    self.applications_loop(position, location)
  File "C:\Users\(username)\IdeaProjects\LinkedIn-Easy-Apply-Bot\easyapplybot.py", line 236, in applications_loop
    self.write_to_file(button, jobID, self.browser.title, result)
  File "C:\Users\(username)\IdeaProjects\LinkedIn-Easy-Apply-Bot\easyapplybot.py", line 275, in write_to_file
    writer.writerow(toWrite)
  File "C:\Users\(username)\.pyenv\pyenv-win\versions\3.9.5\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 58-59: character maps to <undefined>

Desktop (please complete the following information):

  • OS: Windows 10 Enterprise (19042.985)
  • Browser: Google Chrome
  • Version 90.0.4430.212 (Official Build) (64-bit)

To Reproduce
Steps to reproduce the behavior:

  1. Run easyapplybot.py
  2. Wait

Expected behavior
The bot shouldn't crash and should keep applying.

The Program is not really applying

Usually when I apply for a job on LinkedIn I receive an email that confirms my application,but I didn't receive any email .So I went to linkedIn to reapply for the same job that the bot should 've applied to ,normally I can't apply to it anymore since the bot has already did but in fact I had to apply for it manually so the bot is not working correctly.
image

GUI switch

GUI switch is at line 315 in easyapplybot.py if you could put that in the readme that would be cool.
line 117 and 118 were causing errors, without knowing what they are for i ended up just commenting them out and everything still worked. if you could add comment for their function that would make it easier to fix.
Thanks

The script failed to be installed on pip3

Describe the bug
I just installed python to my mac, it has only the pip3 command when I hit pip3 install requiremnt.txt
I got a ton of errors
You could find the logs below
Screenshots
image

Logs
ERROR: Command errored out with exit status 1:
command: /Applications/Xcode.app/Contents/Developer/usr/bin/python3 /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /private/var/folders/7k/dhn34tsn6ws3fsts9dt78_mr0000gp/T/pip-build-env-gys917s1/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel 'Cython>=0.29.13' 'numpy==1.13.3; python_version=='"'"'3.6'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.14.5; python_version>='"'"'3.7'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.16.0; python_version=='"'"'3.6'"'"' and platform_system=='"'"'AIX'"'"'' 'numpy==1.16.0; python_version>='"'"'3.7'"'"' and platform_system=='"'"'AIX'"'"''
cwd: None
Complete output (4388 lines):
Ignoring numpy: markers 'python_version == "3.6" and platform_system != "AIX"' don't match your environment
Ignoring numpy: markers 'python_version == "3.6" and platform_system == "AIX"' don't match your environment
Ignoring numpy: markers 'python_version >= "3.7" and platform_system == "AIX"' don't match your environment
Collecting setuptools
Using cached https://files.pythonhosted.org/packages/ce/3c/096ac70aeb74485a2e7ab6f8146ea41cb4cecd955fdb2f30d51b51d7d146/setuptools-51.1.0-py3-none-any.whl
Collecting wheel
Using cached https://files.pythonhosted.org/packages/65/63/39d04c74222770ed1589c0eaba06c05891801219272420b40311cd60c880/wheel-0.36.2-py2.py3-none-any.whl
Collecting Cython>=0.29.13
Using cached https://files.pythonhosted.org/packages/ad/4b/9e53bcce3c959fd0db143626e573210bba07be810fe8d7296373948c4183/Cython-0.29.21-py2.py3-none-any.whl
Collecting numpy==1.14.5
Downloading https://files.pythonhosted.org/packages/d5/6e/f00492653d0fdf6497a181a1c1d46bbea5a2383e7faf4c8ca6d6f3d2581d/numpy-1.14.5.zip (4.9MB)
Building wheels for collected packages: numpy
Building wheel for numpy (setup.py): started
Building wheel for numpy (setup.py): finished with status 'error'
ERROR: Command errored out with exit status 1:
command: /Applications/Xcode.app/Contents/Developer/usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/7k/dhn34tsn6ws3fsts9dt78_mr0000gp/T/pip-install-tn6vz1qr/numpy/setup.py'"'"'; file='"'"'/private/var/folders/7k/dhn34tsn6ws3fsts9dt78_mr0000gp/T/pip-install-tn6vz1qr/numpy/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d /private/var/folders/7k/dhn34tsn6ws3fsts9dt78_mr0000gp/T/pip-wheel-0zawlzmh --python-tag cp38
cwd: /private/var/folders/7k/dhn34tsn6ws3fsts9dt78_mr0000gp/T/pip-install-tn6vz1qr/numpy/
Complete output (4069 lines):
Running from numpy source directory.
/private/var/folders/7k/dhn34tsn6ws3fsts9dt78_mr0000gp/T/pip-install-tn6vz1qr/numpy/numpy/distutils/misc_util.py:464: SyntaxWarning: "is" with a literal. Did you mean "=="?
return is_string(s) and ('*' in s or '?' is s)
blas_opt_info:
blas_mkl_info:
customize UnixCCompiler
libraries mkl_rt not found in ['/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib', '/usr/local/lib', '/usr/lib']
NOT AVAILABLE

blis_info:

Chrome Crashes

====== WebDriver manager ======
Current google-chrome version is 89.0.4389
Get LATEST driver version for 89.0.4389
There is no [linux64] chromedriver for browser 89.0.4389 in cache
Get LATEST driver version for 89.0.4389
Trying to download new driver from https://chromedriver.storage.googleapis.com/89.0.4389.23/chromedriver_linux64.zip
Driver has been saved in cache [/root/.wdm/drivers/chromedriver/linux64/89.0.4389.23]
Traceback (most recent call last):
File "easyapplybot.py", line 22, in
driver = webdriver.Chrome(ChromeDriverManager().install())
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/chrome/webdriver.py", line 81, in init
desired_capabilities=desired_capabilities)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in init
self.start_session(capabilities, browser_profile)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

Any idea how to troubleshoot? (Sent from Chrome on Ubuntu 18 with XCFE)

Doesn't work beyond a page!

Tried like many times and couple of computers.
It either go to sleep and then exits OR applies to max of 1 page. Doesn't work basically.
Not sure if i am doing something wrong

Feature Request

Do you think we could add support for indeed easy apply ?

Not applying for jobs.

Hello. I installed and ran the code but it just opened linkedin, signed in and thats it. The execution ends there. It is not applying for jobs.
Screen Shot 2022-02-15 at 11 08 34 AM

Question: How secure is this bot, really?

First off, awesome idea fr! I really like the project.

Now, I'm curious, realistically, how probable is it that someone could get banned using this bot? I see there are a lot of sleep timers and all that, but I'm still curious

Question: how did you determine sleep timing?

Just a question: why all the sleeping? I can understand that it's to prevent LinkedIn from "catching" the bot, but it seems that the sleep times can be reduced a bit.

Have you determined the sleep times through research and/or testing or is it just an abundance of caution?

Remote location is set to Remote, OR, US

Describe the bug
In my config file, I have one of my locations set to 'Remote'. However when I run the script, the location changes to 'Remote, OR, US' in the LinkedIn search.

Screenshots
Screen Shot 2020-11-15 at 12 23 49 AM

Expected behavior
Would expect the remote location to remain as remote. Instead, it is somehow set to remote, OR, US

Linkedin Disconnects the Bot

I have pulled your repository and only changed the config.yaml file. After few minutes(around an hour), my account signed out. Is it only related with me?

Please add support for additional questions on the application

This bot only really works for applications which you don't have to populate things in certain fields. Some companies ask for how many years experience with X or to answer some questions the recruiter put there. Can we have the option to populate these with a blank character? Also sometimes there are dropdowns for visa status and it would be nice to add support to answer these questions.

Sometimes if recruiters have recruiter accounts they can input custom questions (for those you can just populate them with a single character). Here are questions that will get you through the majority of the easy apply posts:

Email address*
Phone country code*
Mobile phone number*

Please include a resume

Do you have a valid driver's license? (yes/no checkbox)

What is your university grade point average (4.0 GPA Scale)? (1.0-4.0)

How many years of TECHNOLOGY experience do you currently have? (whole numbers only)

What is your level of proficiency in LANGUAGE? (dropdown: None, Conversational, Professional, Native or bilingual)

Do you have the following license or certification: CERTNAME? yes/no checkbox)

Have you completed the following level of education: DEGREE TYPE? (yes/no checkbox)

Are you comfortable commuting to this job's location? (yes/no checkbox)

How many years of work experience do you have using TECHNOLOGY? (whole numbers only)

We must fill this position urgently. Can you start immediately? (yes/no checkbox)

Are you legally authorized to work in COUNTRY? (yes/no checkbox)

Will you now, or in the future, require sponsorship for employment visa status (e.g. H-1B visa status)? (yes/no checkbox)

error after first apply

Describe the bug
File "\LinkedIn-Easy-Apply-Bot2\easyapplybot.py", line 216, in applications_loop
self.write_to_file(button, jobID, self.browser.title, result)
File "
\LinkedIn-Easy-Apply-Bot2\easyapplybot.py", line 256, in write_to_file
writer.writerow(toWrite)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 65-71: character maps to

Screenshots
If applicable, add screenshots of the LinkedIn page you are attempting to apply to.

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

Error Statement
If applicable and not stated above, provide the error statement you are receiving.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Additional context
Add any other context about the problem here.

The Program stop at application page and throws an error.

The program throws an error in normalizeXYArgs in init file on pyautogui. Th error is
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\pyautogui__init
_.py", line 691, in _normalizeXYArgs

return Point(int(firstArg), int(secondArg)) # firstArg and secondArg are just x and y number values

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

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.