본문 바로가기
Crawling/기타

Selenium (셀레니움) 설치하기 및 기본 명령어 / 크롬드라이버 자동설치

by leehii 2022. 7. 4.

import selenium

 

from selenium import webdriver as wb

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait as wait

from selenium.webdriver.support import expected_conditions as EC

import time

 

 

 

driver = wb.Chrome()

driver.get(url)

driver.implicitly_wait(time_to_wait=10)

 

 

 값 찾기 2가지 방법

 

element = driver.find_element(By.XPATH, value='크롤링하려는 값 XPath').text

element = driver.find_element(By.XPATH, "//태그[text()='찾을텍스트']")

 

 

 

클릭하기 2가지 방법

 

1. 클릭하면 바로

element = driver.find_element(By.XPATH, value='크롤링하려는 값 XPath').click()

 

2. 잠시 시간대기

 

wait(driver, 시간초).until(EC.element_to_be_clickable((By.XPATH, "XPATH 값"))).click()

 

 

time.sleep(대기할 시간초)

 

 

 

 

텍스트 입력하기

 

element = driver.find_element(By.XPATH, value='크롤링하려는 값 XPath').send_keys("입력할텍스트")

 

 

driver.quit()

driver.close()

 

 
----------------------------------------------------------------------

 

 

# 설치작업

 

(셀레니움과 크롬드라이버가 깔리지 않았을떄)

 

 

셀레니움 사용에는 드라이버 설치가 필요함(사용하는 브라우저에 따라 다름)

 

pip install selenium

 

pip install chromedriver-autoinstaller

 

 

으로  셀레니움과 크롬 드라이버 자동설치를 설치한 후  

 

 

# 크롬드라이버 자동설치를 위한 임포트 , 크롬드라이버 버젼 확인, 해당 경로에 설치하기

 

(설치안됐을 경우 하는 작업 혹은 크롬 버젼이 변했을경우 해주는 작업)

 

 

pip install chromedriver-autoinstaller

 

from selenium import webdriver
import chromedriver_autoinstaller
import os

chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0]
driver_path = f'./{chrome_ver}/chromedriver.exe'
if os.path.exists(driver_path):
    print(f"chrom driver is insatlled: {driver_path}")
else:
    print(f"install the chrome driver(ver: {chrome_ver})")
    chromedriver_autoinstaller.install(True)


driver = webdriver.Chrome(driver_path)

 

로 자동으로 크롬 드라이버를 설치하도록 적어준다

 

여기서  implicitly wait는 브라우저를 가져오는데 걸리는 시간차에 대한 명령어인데

 

implicitly wait (웹페이지 전체가 넘어올때까지 기다리기) 와

explicitly wait (웹페이지의 일부분이 나타날때까지 기다리기) 가 있다.

 

전체페이지 넘어올때까지 10초 정도 시간을 줬는데

그 내용이 다 들어오기도 전에 다른 명령어가 실행되버러기나 할때의 문제를 위해

 

익스플리시틀리 웨이트를 사용해야함

 
-----------------------------------------------------------------------

 

# 셀레니움 사용을 위한 임포트 작업

 
 

import selenium

 
 
 
 

# 브라우저를 열기위한 임포트 작업 (웹 브라우저 통제)

 
 

from selenium import webdriver

 

 

 

#  입력을 위한 라이브러리 (컴퓨터용 키보드)

 

from selenium.webdriver.common.keys import Keys

 
 
 
 
 

# 브라우저 열기  전 옵션들

 
 

options = webdriver.ChromeOptions()

 
 

-->> 옵션 변수 선언

 

 

 

options.add_argument('창크기')

 
 

-->> 크롬창 크기 설정하기

 
 
 
 

(ex)

 

options = webdriver.ChromeOptions()

하고

 

options.add_argument('window-size=1920,1080')

 

options.add_argument('window-size='start-maximized')

options.add_argument('headless')

하고

 

driver = webdriver.Chrome('p_env/chromedriver.exe', options=options)

 
 
 
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument('disable-gpu')

options.add_argument('start-maximized')
options.add_argument('disable-infobars')
options.add_argument('--disable-extensions')

options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')

options.add_experimental_option('debuggerAddress', '127.0.0.1:9222')
 
 
 
 

# 브라우저 열기 

 

driver = webdriver.Chrome('chromedriver.exe', options=options )

 
 

여기서 option은 열기 코드 전에 넣어줘야 함

 
 
 

# url 가져오기, implicitly wait 주기 

 

 

 

driver.get(url)

driver.implicitly_wait(time_to_wait=10)

element = driver.find_element(By.XPATH, value='크롤링하려는 값 XPath').text

 
 

-->>

 
 

xpath는 검사도구에서 원하는 element 값을 클릭하고 Copy >> Copy XPath 를 사용해 가져올 수 있다!

 
 

 

# 스크롤 화면이동

driver.execute_script("window.scrollTo(0, Y)")

 

driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')

-->최하단 이동

 

# 마우스관련

 

click() 

-->>  좌클릭

 

click_and_hold()

-->> 좌클릭 누르고있기

 

 

context_click()

-->> 우클릭

 

release()

-->> 마우스 때기

 

 

# 키보드 입력

 

?.send_keys('입력할내용')

-->> 글자입력하기

 

?.send_keys(Keys.ENTER)

-->> 엔터치기

 

?.send_keys(Keys.END)

-->> END치기(스크롤내림)

 

 

#  대기시간 주기

 

wait(driver, 몇초줄지).until(EC.element_to_be_clickable((By.XPATH, "XPATH값")).click()

 

time.sleep()

 

 

 

# 브라우저 닫기 

 
 

driver.close()

 
 

-->> 현재 탭 닫기

 
 
 

driver.quit()

 
 

-->> 브라우저 닫기

 
 
 

# 브라우저 뒤로 가기 / 앞으로 가기

 
 
 

driver .back()

 
 

driver .forward()

 
 
 
 
 
--------------------------------------------------------------------------------------------
 
 

 

# explicitly wait를 사용하는 경우

 

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

 

driver = webdriver.Chrome('chromedriver.exe')

driver.get(url)

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "idname")))

 

이렇게 복붙하기!

 

(그냥 기본적으로 물리적인 시간을 기다리는 명령어는 time.sleep)

 

 

 

---------------------------------------------------------------------------------------------