Crawling/기타

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

leehii 2022. 7. 4. 18:00

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)

 

 

 

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