먼저 chromedriver-autoinstaller, selenium을 다운받고 코드를 실행해야 합니다.
# 파일명 : main.py
import chromedriver_autoinstaller
chromedriver_autoinstaller.install()
from sutils import get_selenium_driver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = get_selenium_driver(False)
driver.get('웹 사이트 주소 입력')
프로젝트 안에서 새 Python File을 열고 다음 코드를 입력합니다.
# 파일명 : sutils.py
from selenium import webdriver
def get_selenium_driver(headless=True):
chrome_options = webdriver.ChromeOptions()
if headless:
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('lang=en')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument("disable-gpu")
chrome_options.add_argument("disable-infobars")
chrome_options.add_argument("--disable-extensions")
driver = webdriver.Chrome(options=chrome_options)
driver.set_window_size(1920, 1080)
return driver
만약 위 코드를 사용하고 자동 로그인(아래에 코드 있음)을 시도했을 때 로그인이 막힌다면, 다음 코드를 main.py에 입력합니다. (이 코드를 사용할 때는 sutils.py가 필요없습니다.)
다음 코드를 입력해도 로그인이 막힌다면, 저도 잘 모릅니다 ..
import chromedriver_autoinstaller
chromedriver_autoinstaller.install()
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import subprocess
def get_original_chrome_driver():
subprocess.Popen(r'C:\Program Files\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\chrometemp"')
# chrome이 있는 위치를 적어줍니다.
option = Options()
option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0]
try:
driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)
except:
chromedriver_autoinstaller.install(True)
driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)
driver.implicitly_wait(10)
driver.set_window_size(1920, 1080)
return driver
driver = get_original_chrome_driver()
driver.get('웹 사이트 주소 입력')
(이제부터 나오는 코드들은 main.py에 입력합니다.)
먼저 예시를 보여드리겠습니다.
저는 나이키 로그인을 시도해봤습니다.
id = '아이디 입력'
pw = '비밀번호 입력'
try:
WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.CLASS_NAME, 'login')))
elem_btn = driver.find_element(By.CLASS_NAME, 'login')
elem_btn.click() # 버튼 클릭
WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.ID, 'j_username')))
elem_id = driver.find_element(By.ID, 'j_username')
elem_id.send_keys(id) # id 입력
WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.ID, 'j_password')))
elem_pw = driver.find_element(By.ID, 'j_password')
elem_pw.send_keys(pw)
login_btn = driver.find_element(By.XPATH, '//button[@class="button large width-max"]')
login_btn.click()
except: # 이미 로그인이 되어있는 경우
pass
위 코드를 보면
WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.CLASS_NAME, 'login')))
elem_btn = driver.find_element(By.CLASS_NAME, 'login')
elem_btn.click()
이러한 형태의 코드가 계속 반복됩니다.
WebDriverWait(driver, 3)
: 창이 뜰 때까지 최대 3초 기다린다는 뜻
By.CLASS_NAME, 'login'
, By.XPATH, '//button[@class="button large width-max"]'
, ...
: 웹 사이트에서 F12를 누른 후 클릭하고 싶은, 또는 입력하고 싶은 곳을 찾아 코드를 작성합니다. 위 코드는 나이키 로그인에 맞는 코드이므로 다른 사이트에 적용하려면 수정해야합니다.
구매도 똑같습니다.
WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.CLASS_NAME, 'login')))
elem_btn = driver.find_element(By.CLASS_NAME, 'login')
elem_btn.click()
이 코드를 수정하여 사용합니다.
import time
time.sleep(600) # 600초 동안 창이 꺼지지 않음
driver.close()
안녕하세요. add_experimental_option() 디버거 를 이용하면 UA 변경을 포함한 모든 add_argument 옵션들이 먹통이 되던데, 디버거와 옵션들을 동시에 사용할 수 있을까요