Skip to content

Commit

Permalink
Merge pull request #989 from AIHawk-FOSS/main
Browse files Browse the repository at this point in the history
merge
  • Loading branch information
feder-cr authored Dec 3, 2024
2 parents 76350f4 + d58c8f7 commit 9f795c8
Show file tree
Hide file tree
Showing 29 changed files with 2,361 additions and 1,484 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<!-- [![Telegram](https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/AIhawkCommunity) -->

# Auto_Jobs_Applier_AIHawk
# AIHawk the first Jobs Applier AI Agent

![CI](https://github.com/feder-cr/Auto_Jobs_Applier_AIHawk/actions/workflows/ci.yml/badge.svg)

Expand Down Expand Up @@ -616,7 +616,7 @@ Using this folder as a guide can be particularly helpful for:
python main.py --resume /path/to/your/resume.pdf
```

- **Using the colled mode:**
- **Using the collect mode:**
If you want to collect job data only to perform any type of data analytics you can use the bot with the `--collect` option. This will store in output/data.json file all data found from linkedin jobs offers.

```bash
Expand Down
7 changes: 7 additions & 0 deletions constants.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
DATE_ALL_TIME = "all_time"
DATE_MONTH = "month"
DATE_WEEK = "week"
DATE_24_HOURS = "24_hours"

LINKEDIN = "linkedin"

# constants used in application
SECRETS_YAML = "secrets.yaml"
WORK_PREFERENCES_YAML = "work_preferences.yaml"
Expand Down
270 changes: 193 additions & 77 deletions main.py

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,4 @@ webdriver-manager==4.0.2
pytest
pytest-mock
pytest-cov
undetected-chromedriver==3.5.5
42 changes: 2 additions & 40 deletions src/ai_hawk/authenticator.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,6 @@

from src.logging import logger

def get_authenticator(driver, platform):
if platform == 'linkedin':
return LinkedInAuthenticator(driver)
else:
raise NotImplementedError(f"Platform {platform} not implemented yet.")

class AIHawkAuthenticator(ABC):

@property
Expand Down Expand Up @@ -56,7 +50,7 @@ def handle_login(self):
def prompt_for_credentials(self):
try:
logger.debug("Enter credentials...")
check_interval = 4 # Interval to log the current URL
check_interval = 45 # Interval to log the current URL
elapsed_time = 0

while True:
Expand All @@ -74,7 +68,7 @@ def prompt_for_credentials(self):
break
else:
# Optionally wait for the password field (or any other element you expect on the login page)
WebDriverWait(self.driver, 10).until(
WebDriverWait(self.driver, 60).until(
EC.presence_of_element_located((By.ID, "password"))
)
logger.debug("Password field detected, waiting for login completion.")
Expand All @@ -88,35 +82,3 @@ def prompt_for_credentials(self):
@abstractmethod
def handle_security_checks(self):
pass

class LinkedInAuthenticator(AIHawkAuthenticator):

@property
def home_url(self):
return "https://www.linkedin.com"

def navigate_to_login(self):
return self.driver.get("https://www.linkedin.com/login")

def handle_security_checks(self):
try:
logger.debug("Handling security check...")
WebDriverWait(self.driver, 10).until(
EC.url_contains('https://www.linkedin.com/checkpoint/challengesV2/')
)
logger.warning("Security checkpoint detected. Please complete the challenge.")
WebDriverWait(self.driver, 300).until(
EC.url_contains('https://www.linkedin.com/feed/')
)
logger.info("Security check completed")
except TimeoutException:
logger.error("Security check not completed. Please try again later.")

@property
def is_logged_in(self):
keywords = ['feed', 'mynetwork','jobs','messaging','notifications']
return any(item in self.driver.current_url for item in keywords) and 'linkedin.com' in self.driver.current_url

def __init__(self, driver):
super().__init__(driver)
pass
3 changes: 2 additions & 1 deletion src/ai_hawk/bot_facade.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from ai_hawk.job_manager import AIHawkJobManager
from src.logging import logger


Expand Down Expand Up @@ -28,7 +29,7 @@ class AIHawkBotFacade:
def __init__(self, login_component, apply_component):
logger.debug("Initializing AIHawkBotFacade")
self.login_component = login_component
self.apply_component = apply_component
self.apply_component : AIHawkJobManager = apply_component
self.state = AIHawkBotState()
self.job_application_profile = None
self.resume = None
Expand Down
Loading

0 comments on commit 9f795c8

Please sign in to comment.