mirror of
https://github.com/browser-use/browser-use
synced 2026-05-06 17:52:15 +02:00
Draft example to apply for job
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
import csv
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
from PyPDF2 import PdfReader
|
||||
|
||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
@@ -8,6 +12,9 @@ from typing import List, Optional
|
||||
|
||||
from langchain_openai import ChatOpenAI
|
||||
from pydantic import BaseModel
|
||||
from selenium.webdriver.common.action_chains import ActionChains
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
|
||||
from browser_use.agent.service import Agent
|
||||
from browser_use.browser.service import Browser
|
||||
@@ -28,32 +35,68 @@ class Jobs(BaseModel):
|
||||
jobs: List[Job]
|
||||
|
||||
|
||||
@controller.action('Save jobs', param_model=Jobs)
|
||||
@controller.action('Save jobs to file', param_model=Jobs)
|
||||
def save_jobs(params: Jobs):
|
||||
with open('jobs.txt', 'a') as f:
|
||||
with open('jobs.csv', 'a', newline='') as f:
|
||||
writer = csv.writer(f)
|
||||
for job in params.jobs:
|
||||
f.write(f'{job.title} at {job.company}: {job.salary} ({job.link})\n')
|
||||
writer.writerow([job.title, job.company, job.salary, job.link])
|
||||
|
||||
|
||||
# read from file
|
||||
@controller.action('Read jobs from file')
|
||||
def read_jobs():
|
||||
with open('jobs.txt', 'r') as f:
|
||||
with open('jobs.csv', 'r') as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
# Without Pydantic model - using simple parameters
|
||||
@controller.action('Ask me for information')
|
||||
@controller.action('Ask me for information / help')
|
||||
def ask_human(question: str) -> str:
|
||||
return input(f'\n{question}\nInput: ')
|
||||
|
||||
|
||||
@controller.action('Read my cv')
|
||||
def read_cv():
|
||||
pdf = PdfReader('cv_04_24.pdf')
|
||||
|
||||
text = ''
|
||||
|
||||
for page in pdf.pages:
|
||||
text += page.extract_text() or ''
|
||||
|
||||
return text
|
||||
|
||||
|
||||
from selenium.webdriver.common.action_chains import ActionChains
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
|
||||
|
||||
@controller.action('Upload cv to index', requires_browser=True)
|
||||
def upload_cv(index: int, browser: Browser):
|
||||
ActionChains(browser._get_driver()).send_keys(Keys.ESCAPE).perform()
|
||||
file_input = browser.wait_for_element('input[type="file"]')
|
||||
my_cv = Path.cwd() / 'cv_04_24.pdf'
|
||||
|
||||
file_input.send_keys(my_cv.as_posix())
|
||||
|
||||
return f'Uploaded cv to index {index}'
|
||||
|
||||
|
||||
@controller.action('Close file dialog', requires_browser=True)
|
||||
def close_file_dialog(browser: Browser):
|
||||
ActionChains(browser._get_driver()).send_keys(Keys.ESCAPE).perform()
|
||||
|
||||
|
||||
async def main():
|
||||
task = (
|
||||
'Find machine learning engineer jobs in Berlin and '
|
||||
'start applying for them over in new tabs - not via linkedin. '
|
||||
'If you need more information, ask me for it.'
|
||||
)
|
||||
# task = (
|
||||
# 'Read my cv & find machine learning engineer jobs in Zurich for me. '
|
||||
# 'Save them to a file'
|
||||
# 'then start applying for them in new tabs - please not via job portals like linkedin, indeed, etc. '
|
||||
# 'If you need more information or help, ask me.'
|
||||
# )
|
||||
|
||||
task = 'go to https://jobs.lever.co/anybotics/edba1c62-9473-4043-8b1d-a353b2527587/apply# and Upload my cv '
|
||||
model = ChatOpenAI(model='gpt-4o')
|
||||
agent = Agent(task=task, llm=model, controller=controller)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user