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)
---------------------------------------------------------------------------------------------
'Crawling > 기타' 카테고리의 다른 글
Selenium 라이브러리 오류 모음 (0) | 2022.07.19 |
---|---|
replace()와 strip를 섞어서 Crawling한 값 txt파일로 가져오기 (0) | 2022.07.06 |
Selenium(셀레니움)에서 Element(요소)에 접근하는 방법들 - ( By.XPATH / By.CLASS_NAME / By.ID / By.NAME / By.TAG_NAME / By.LINK_TEXT ) (0) | 2022.07.04 |
크롤링 간단 명령어 정리 1 (requests 라이브러리, BeautifulSoup 라이브러리) (0) | 2022.07.01 |