nicolomantini / LinkedIn-Easy-Apply-Bot

Automate the application process on LinkedIn
Apache License 2.0
765 stars 321 forks source link

Does not automatically select resume #121

Closed kuzae closed 1 year ago

kuzae commented 1 year ago

Resume's aren't chosen when applying, Linkedin changed the ability to set default resume.

Bot prevention by LinkedIn renders the bot pretty useless outside of a couple job listing that doesn't require a resume to be selected.

You can get around this by uploading the resume every time, but chances are this will flag you as a bot as you will endlessly keep uploading new resumes every job listing.

mohamed-sultan commented 1 year ago

@kuzae / https://www.linkedin.com/jobs/application-settings/ go for the above link then remove all resume only keep the one u need

kuzae commented 1 year ago

@kuzae / https://www.linkedin.com/jobs/application-settings/ go for the above link then remove all resume only keep the one u need

That doesnt' change anything. Linkedin removed the ability to preset a default resume. image Retroactively removing all the resumes after the script upload it 200 times is not a reasonable thing to do.

They also use dynamic ID's for selecting the resume so it's not as simple as just adding a line to click it.

I'm not sure if the emberXXX id's are tied to anything else, but it could be as simple as just selecting the first element that has an emberXXX id.

PH13 commented 1 year ago

I added the following to line 389 and 390 and it will choose the top resume on this list if the dialogue appears.

                resume_select = self.browser.find_element("xpath", '/html/body/div[3]/div/div/div[2]/div/div[2]/form/div/div/div/div[1]/div/div[2]/div[1]/div[2]/button[1]')
                resume_select.click()
PH13 commented 1 year ago

Also comment out 390 to 400

                # input_buttons = self.browser.find_elements(upload_locator[0],
                #                                            upload_locator[1])
                # for input_button in input_buttons:
                #     parent = input_button.find_element(By.XPATH, "..")
                #     sibling = parent.find_element(By.XPATH, "preceding-sibling::*")
                #     grandparent = sibling.find_element(By.XPATH, "..")
                #     for key in self.uploads.keys():
                #         sibling_text = sibling.text
                #         gparent_text = grandparent.text
                #         if key.lower() in sibling_text.lower() or key in gparent_text.lower():
                #             input_button.send_keys(self.uploads[key])
kuzae commented 1 year ago

I've created a fork that resolves this issue, as well as a couple of other issues that rose from linked in updating their UI.