wodsuz / EasyApplyJobsBot

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!
https://www.automated-bots.com/
Other
424 stars 141 forks source link

A resume is required #21

Closed JamesTsetsekas closed 9 months ago

JamesTsetsekas commented 1 year ago

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

JamesTsetsekas commented 1 year ago

Linkedin has appeared to added a step where you must select , or upload a resume.

Jscorz commented 1 year ago

Linkedin has appeared to added a step where you must select , or upload a resume.

I am having this same issue and cannot figure out a solution. May I ask which other job bot uploads a resume for each job?

keeano92 commented 1 year ago

@JamesTsetsekas & @Jscorz Since this is using Selenium you can write the step that was added to the actions. I get an error and then it adds the resume but it still does the trick. A bit sloppy but feel free to use it in 'linkedin.py' Line:188 paste this:

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

keeano92 commented 1 year ago

Make sure you only have one resume or alter the code respectfully depending on which resume you are targeting. This is all built using a development tool for testing UI's for DevOps and QA...The documentation on how to handle this is Docs

You have to really look at the DOM elements and just like Jquery or an alternative you will find Ids or in this case, everything is using the "Labels" since they do not change like the rest of the element data.

keeano92 commented 1 year ago

I also re-wrote the output functionality to output jobs already applied and successfully applied to the text file and output anything it was unable to apply to into a spreadsheet. This allows me to more easily color coat or adjust the spreadsheet as needed as well as click on the links. The downside I can not work in the spreadsheet unless it is open in VSC and click on the links but if open in Excel it will see the file as open and not append the rows as needed. Sure there is a way around this but I slapped this together in about an hour.

WatameBytes commented 1 year ago

For anyone having trouble figuring out how to implement @keeano92 code. Go to linkedin.py and replace the method on line 181 with the following.

Maybe remove the print() and commented lines of code. I also went to constants.botSpeed and changed the default value from 5 to 2.

This code works if you only have one resume. To remove any other resume, Setting > Data Privacy > Job Application Setting and remove resumes till you have one.

Keep in mind, the code only works if you have applied to jobs before, since all it does is click next.

Little warning, the code does not deselect "follow company" anymore, since I felt like that was an extra step that introduces errors.

I highly suggest you put some filters in your inbox, since the program stops after it attempts to submit 1000 applications, so you can imagine how cluttered this makes your email.

Formatting got weird, do your best to copy the code below!!!

def applyProcess(self, percentage, offerPage): applyPages = math.floor(100 / percentage) result = ""
try: try: for pages in range(applyPages-2): self.driver.find_element(By.CSS_SELECTOR,"button[aria-label='Continue to next step']").click() time.sleep(random.uniform(1, constants.botSpeed))

            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))
        except:
            print("Hello world")
        try:
            for pages in range(applyPages-2):
                print("In the loop")
                self.driver.find_element(By.CSS_SELECTOR,"button[aria-label='Continue to next step']").click()
                # self.driver.find_element(By.CSS_SELECTOR, "button[aria-label='Review your application']").click()
                time.sleep(random.uniform(1, constants.botSpeed))
        except:
            print("We are here!!!")

        # if config.followCompanies is False:
        #     self.driver.find_element(By.CSS_SELECTOR,"label[for='follow-company-checkbox']").click()
        #     time.sleep(random.uniform(1, constants.botSpeed))

        self.driver.find_element(By.CSS_SELECTOR, "button[aria-label='Review your application']").click()
        time.sleep(random.uniform(1, constants.botSpeed))

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

        result = "* 🥳 Just Applied to this job: " +str(offerPage)
    except:
        # PRO FEATURE! OUTPUT UNANSWERED QUESTIONS, APPLY THEM VIA OPENAI, output them.
        result = "* 🥵 " +str(applyPages)+ " Pages, couldn't apply to this job! Extra info needed. Link: " +str(offerPage)
    return result
wodsuz commented 9 months ago

The code is updated, it should select resumes properly now. Soon pro version will be released on our site - https://www.automated-bots.com/