셀레니움 활용 1

JOOYEUN SEO·2024년 10월 7일

100 Days of Python

목록 보기
49/76
post-thumbnail

🗂️ Day49 프로젝트: 채용공고 자동지원

링크드인의 간편 지원 기능을 사용하여 조건에 부합하는 모든 공고에 지원서를 내는 프로그램
(지원서를 자동으로 일괄 제출하고 싶지 않으므로 조건에 부합하는 공고를 모두 저장하는 것으로 변경)

1. 링크드인 계정 생성

🔍 유의 사항

  • 링크드인 계정 생성 : https://www.linkedin.com
  • 셀레니움 사용 시 2단계 인증, 전화번호 인증 사용이 불가능해서 실습용 부계정 생성

2. 자동 로그인

🔍 유의 사항

  • 강의 진행은
    • 채용공고 → 키워드와 지역을 기입하고 간편지원 클릭 → 검색 클릭
    • 모든 조건이 포함된 url을 복사 후 웹드라이버를 사용하여 페이지를 여는 것
  • 강의처럼 할 경우 로그인 화면이 계속 바뀌어서 처음부터 메인 화면에서 진행하는 것으로 변경

3. 채용공고에 지원

🔍 유의 사항

  • 채용공고 하나를 자동으로 저장하는 것으로 변경
  • 로그인 시 가끔씩 뜨는 캡차는 직접 완료해야 한다

4. 한꺼번에 지원

🔍 유의 사항

  • 페이지에 있는 모든 채용공고를 자동으로 저장하는 것으로 변경
  • 셀레니움 요소를 찾지 못했을 때 나오는 커스텀 에러 NoSuchElementException 임포트 하기

⌨️ main.py 최종

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://linkedin.com")
time.sleep(2)

# 로그인 버튼 클릭
login = driver.find_element(By.XPATH, value='//*[@id="main-content"]/section[1]/div/div/div[2]/a')
login.click()
time.sleep(5)

# 이메일과 비밀번호 입력
email_field = driver.find_element(By.ID, value="username")
email_field.send_keys("이메일")
password_field = driver.find_element(By.ID, value="password")
password_field.send_keys("비밀번호")
password_field.send_keys(Keys.ENTER)
time.sleep(5)

# 원하는 조건으로 검색
job_search_bar = driver.find_element(By.XPATH, value='//*[@id="global-nav-typeahead"]/input')
job_search_bar.send_keys("python developer")
job_search_bar.send_keys(Keys.ENTER)
time.sleep(5)

# 간편지원 필터 클릭
easy_apply = driver.find_elements(By.CSS_SELECTOR, "main div div div div ul li")[1]
easy_apply.click()
time.sleep(5)

# 공고 목록
job_list= driver.find_elements(By.CLASS_NAME, 'jobs-search-results__list-item')
print(len(job_list))

for job in job_list:
    job.click()
    driver.execute_script("arguments[0].scrollIntoView();", job)
    time.sleep(2)

    # 공고 저장
    try:
        save = driver.find_element(By.CLASS_NAME, "jobs-save-button")
        save.click()
        time.sleep(5)

    # 이미 내려간 공고일 경우 스킵하기
    except NoSuchElementException:
        print("No save button, skipped.")
        continue




▷ Angela Yu, [Python 부트캠프 : 100개의 프로젝트로 Python 개발 완전 정복], Udemy, https://www.udemy.com/course/best-100-days-python/?couponCode=ST3MT72524

0개의 댓글