Skip to content

Commit 480390f

Browse files
fixes [BUG]: Not applying to jobs feder-cr#919
1 parent 6bb7073 commit 480390f

File tree

1 file changed

+25
-18
lines changed

1 file changed

+25
-18
lines changed

src/ai_hawk/job_manager.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import time
55
from itertools import product
66
from pathlib import Path
7+
import traceback
78
from turtle import color
89

910
from inputimeout import inputimeout, TimeoutOccurred
@@ -13,6 +14,7 @@
1314

1415
from ai_hawk.linkedIn_easy_applier import AIHawkEasyApplier
1516
from config import JOB_MAX_APPLICATIONS, JOB_MIN_APPLICATIONS, MINIMUM_WAIT_TIME_IN_SECONDS
17+
import job
1618
from src.job import Job
1719
from src.logging import logger
1820

@@ -155,7 +157,7 @@ def start_applying(self):
155157
logger.debug("Starting the application process for this page...")
156158

157159
try:
158-
jobs = self.get_jobs_from_page()
160+
jobs = self.get_jobs_from_page(scroll=True)
159161
if not jobs:
160162
logger.debug("No more jobs found on this page. Exiting loop.")
161163
break
@@ -166,7 +168,7 @@ def start_applying(self):
166168
try:
167169
self.apply_jobs()
168170
except Exception as e:
169-
logger.error(f"Error during job application: {e}")
171+
logger.error(f"Error during job application: {e} {traceback.format_exc()}")
170172
continue
171173

172174
logger.debug("Applying to jobs on this page has been completed!")
@@ -239,7 +241,7 @@ def start_applying(self):
239241
time.sleep(sleep_time)
240242
page_sleep += 1
241243

242-
def get_jobs_from_page(self):
244+
def get_jobs_from_page(self, scroll=False):
243245

244246
try:
245247

@@ -252,24 +254,30 @@ def get_jobs_from_page(self):
252254
pass
253255

254256
try:
255-
job_results = self.driver.find_element(By.CLASS_NAME, "jobs-search-results-list")
256-
browser_utils.scroll_slow(self.driver, job_results)
257-
browser_utils.scroll_slow(self.driver, job_results, step=300, reverse=True)
257+
# XPath query to find the ul tag with class scaffold-layout__list-container
258+
job_results_xpath_query = "//ul[contains(@class, 'scaffold-layout__list-container')]"
259+
job_results = self.driver.find_element(By.XPATH, job_results_xpath_query)
258260

259-
job_list_elements = self.driver.find_elements(By.CLASS_NAME, 'scaffold-layout__list-container')[
260-
0].find_elements(By.CLASS_NAME, 'jobs-search-results__list-item')
261+
if scroll:
262+
job_results_scrolableElament = job_results.find_element(By.XPATH,"..")
263+
logger.warning(f'is scrollable: {browser_utils.is_scrollable(job_results_scrolableElament)}')
264+
265+
browser_utils.scroll_slow(self.driver, job_results_scrolableElament)
266+
browser_utils.scroll_slow(self.driver, job_results_scrolableElament, step=300, reverse=True)
267+
268+
job_list_elements = job_results.find_elements(By.XPATH, ".//li[contains(@class, 'jobs-search-results__list-item') and contains(@class, 'ember-view')]")
261269
if not job_list_elements:
262270
logger.debug("No job class elements found on page, skipping.")
263271
return []
264272

265273
return job_list_elements
266274

267-
except NoSuchElementException:
268-
logger.debug("No job results found on the page.")
275+
except NoSuchElementException as e:
276+
logger.warning(f'No job results found on the page. \n expection: {traceback.format_exc()}')
269277
return []
270278

271279
except Exception as e:
272-
logger.error(f"Error while fetching job elements: {e}")
280+
logger.error(f"Error while fetching job elements: {e} {traceback.format_exc()}")
273281
return []
274282

275283
def read_jobs(self):
@@ -307,8 +315,7 @@ def apply_jobs(self):
307315
except NoSuchElementException:
308316
pass
309317

310-
job_list_elements = self.driver.find_elements(By.CLASS_NAME, 'scaffold-layout__list-container')[
311-
0].find_elements(By.CLASS_NAME, 'jobs-search-results__list-item')
318+
job_list_elements = self.get_jobs_from_page()
312319

313320
if not job_list_elements:
314321
logger.debug("No job class elements found on page, skipping")
@@ -489,10 +496,10 @@ def job_tile_to_job(self, job_tile) -> Job:
489496
logger.warning("Job link is missing.")
490497

491498
try:
492-
job.company = job_tile.find_element(By.CLASS_NAME, 'job-card-container__primary-description').text
499+
job.company = job_tile.find_element(By.XPATH, ".//div[contains(@class, 'artdeco-entity-lockup__subtitle')]//span").text
493500
logger.debug(f"Job company extracted: {job.company}")
494-
except NoSuchElementException:
495-
logger.warning("Job company is missing.")
501+
except NoSuchElementException as e:
502+
logger.warning(f'Job company is missing. {e} {traceback.format_exc()}')
496503

497504
# Extract job ID from job url
498505
try:
@@ -512,9 +519,9 @@ def job_tile_to_job(self, job_tile) -> Job:
512519

513520
try:
514521
job.apply_method = job_tile.find_element(By.CLASS_NAME, 'job-card-container__apply-method').text
515-
except NoSuchElementException:
522+
except NoSuchElementException as e:
516523
job.apply_method = "Applied"
517-
logger.warning("Apply method not found, assuming 'Applied'.")
524+
logger.warning(f'Apply method not found, assuming \'Applied\'. {e} {traceback.format_exc()}')
518525

519526
return job
520527

0 commit comments

Comments
 (0)