cs/크롤링

[크롤링] selenium 안녕 ,,?

신_이나 2023. 3. 20. 00:12

 

 

selenium 을 깔아보자!

먼저 크롬 드라이브를 깔아야 한다. 크롬 드라이브는 본인의 크롬 버전과 같은 버전으로 다운로드 해야 하는데, 크롬에 chrome://version/ 을 입력하면 본인의 크롬 버전이 나온다. 이런 것도 있었고만

 

https://sites.google.com/chromium.org/driver/

 

ChromeDriver - WebDriver for Chrome

WebDriver is an open source tool for automated testing of webapps across many browsers. It provides capabilities for navigating to web pages, user input, JavaScript execution, and more. ChromeDriver is a standalone server that implements the W3C WebDriver

sites.google.com

위 사이트에서 본인의 버전과 같은 크롬 드라이버를 설치해주면 된다.

 

 

 

위 화살표 된 버전을 클릭해 주었더니 여러가지 버전에 .zip 가 나타났다.

 

 

난 M1 맥북을 사용하고 있기 때문에, 네번째 mac_arm64 를 다운로드 받았다. 

그 뒤 터미널에 "pip3 install selenium", "pip3 install webdriver_manager" 를 입력하여 selenium 의 환경을 조성하였다.

그리고 구글링에서 찾아낸 코드를 입력하니 실제로 홈페이지가 켜지고 홈페이지가 닫혔다.. wow

 

 

잘 깔린 것도 확인했으니 그럼 내가 원하는 마우스, 스페이스 등을 사용해보자!

 

 

click()

클릭하고 싶을 때는 클릭 함수를 사용하면 된다.

'이 부분을 클릭해줘~' 라는 명령을 완성하기 위해서는 find_element_by_xpath('원하는 태그의 xpath' ) 를 사용하곤 했는데, 버전이 업그레이드 되면서 find_element(By.Xpath, '원하는 태그의 xpath' ) 으로 변화하였다. 이 find_element() 함수는 다양하게 이용할 수 있다.

By.ID 태그의 id값으로 추출
By.NAME 태그의 name값으로 추출
By.XPATH 태그의 경로로 추출
By.LINK_TEXT 링크 텍스트값으로 추출
By.PARTIAL_LINK_TEXT 링크 텍스트의 자식 텍스트 값을 추출
By.TAG_NAME 태그 이름으로 추출
By.CLASS_NAME 태그의 클래스명으로 추출
By.CSS_SELECTOR css선택자로 추출

 

원하는 값을 입력한 뒤 뒤에 .click 을 붙여주면 되는 것이다. 자세한 예시는 아래 삽입하기로 하고 우선 xpath 를 구하는 방법은 아래와 같다. 원하는 태그를 우클릭하면 xpath 를 복사할 수 있다.

 

 

나는 셀레니움으로 '네이버페이지 열기' - '웹툰 버튼 클릭' - '웹툰 페이지 열기' 를 하고 싶었다. 하지만 당연히 이론처럼 한 번에 되지 않았다 하하^^ 그로인해 무수한 구글링을 통해 완성한 나의 '네이버 페이지에서 웹툰 클릭하기' 코드,,

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By #find_element 함수
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)
#페이지가 자동으로 꺼지지 않게 해줌
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
#크롬 버전을 자동으로 맞춰줌

url = 'https://www.naver.com'
driver.get(url)
driver.find_element(By.XPATH, '//*[@id="NM_FAVORITE"]/div[1]/ul[2]/li[8]/a').click()

네 제가 짠 코드는 아래 세 줄 뿐입니다. 하하

그래도 저렇게 하면 잘 굴러간다.

 

 

 

send_keys()

입력하고 싶을 때 사용한다. 괄호 안에 입력하고 싶은 문구를 입력하면 된다. 그럼 바로 예제를 구현해보자.

네이버를 열고 검색창에 '하늬가람' 이라고 검색해보는 코드를 만들어보겠다.

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By #find_element 함수
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)
#페이지가 자동으로 꺼지지 않게 해줌
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
#크롬 버전을 자동으로 맞춰줌

url = 'https://www.naver.com'
driver.get(url)
driver.find_element(By.XPATH, '//*[@id="query"]').send_keys("하늬가람")
driver.find_element(By.XPATH, '//*[@id="search_btn"]').click()

 

그럼 이제 안녕 구글링하느라 힘들었다,,