2021.07.22 - [python] - [파이썬 기초] 셀레니움을 이용한 크롤링
이전 포스트에서 셀레니움 기초에 대해서 알아봤다.
이 포스트에서는 셀레니움에서 사용하는 옵션? 들을 다뤄보도록 하자.
1. 스크롤 다운
def scroll_down():
last_height = driver.execute_script("return document.body.scrollHeight")
cnt = 0
while cnt < 180:
cnt += 1
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
#time.sleep(3) # 필수사항은 아님
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
내 크롤러에서 webdriver 변수는 driver이다.
위 함수에서 driver라고 적혀있는 변수들은 driver = webdriver.Chrome()에서 정의된 변수이니,
만약 당신이 다른 변수로 명명했다면 해당 변수만 바꿔주면 된다.
driver.get()을 이용하여 페이지를 열고 저 함수를 호출하면 맨 아래로 내려간다.
때때로, 스크롤을 내리면 더 많은 정보가 표시되는 페이지들이 있다.
그럴 때, time.sleep을 조절해서 반복문 도는 속도를 늦춰 끝까지 다 볼 수 있게 코딩하면 된다.
2. 수치 입력
수치 입력은 간단한 예제로 대체해보자.
from selenium import webdriver
driver = webdriver.Chrome(PATH)
driver.get('https:naver.com')
여담이지만, url을 입력할 때, 슬래시 없이도 들어가진다.
네이버 화면이 정상적으로 출력되는가?
그럼 로그인을 시도해보자.
NAVER 로그인 이라는 버튼의 XPath를 알아내보자.
어떻게 XPath를 알 수 있는지 궁금하다면. 이전 포스트를 참고하자.
driver.find_element_by_xpath(XPATH).click()
이렇게 xpath의 element를 구하고 바로 click()을 입력해주면 해당 기능을 수행해준다.
이 화면이 나타나면, 아이디와 비밀번호, 로그인 버튼에 해당하는 XPath를 구해보자.
그리고
ID = YourID
PW = YourPW
id_textbox = driver.find_element_by_xpath(ID_XPath)
pw_textbox = driver.find_element_by_xpath(PW_XPath)
id_textbox.send_keys(ID)
pw_textbox.send_keys(PW)
driver.find_element_by_xpath(LOGIN_XPATH).click()
자. 이렇게하면 로그인이 된다.
면 좋겠지만, 2021 07 29 기준으로 자동로그인은 안된다.
자동입력 방지장치가 적용되어있어서 수기로 입력해야한다.
규모가 큰 사이트들은 로그인에 이렇게 자동 로그인 방지장치를 넣으니 유의해두자.
전하고자 했던 바는 xpath를 이용하여 send_keys로 텍스트를 입력하고 제출할 수 있다는 것.
추가적으로 textbox에 send_keys를 이용하여 항목을 추가했다면, textbox.submit()을 통해서 제출도 가능하다.
3. Headless
자 다음은 headless이다.
사실 셀레니움 개발 초기단계에는 어떤식으로 작동하는지 봐야하므로, 창을 띄워놓는게 좋고
로컬에서 작업할 때는 직접 볼 수 있지만 만약 서버에서 크롤러를 동작해야한다면 참 난해하다.
그럴때 쓰이는 옵션이 headless옵션인데. 화면을 띄우지 않고 bs4처럼 통신한다고 생각하면 쉽다.
적용하는 방법은
from selenium.webdriver.chrome.options import Options
option = Options()
option.add_argument('headless')
...
driver = webdriver.Chrome(PATH, chrome_options=option)
위 코드만 갖다 붙이면, 셀레니움이 동작하면서 페이지가 뜨지 않는다.
'python > 크롤링' 카테고리의 다른 글
[파이썬 크롤러] Tweepy를 이용한 트위터 크롤링 [3] (2) | 2021.08.17 |
---|---|
[파이썬 크롤러 ] Tweepy를 이용한 트위터 크롤링 [2] (0) | 2021.07.30 |
[파이썬 크롤러 ] Tweepy를 이용한 트위터 크롤링 [1] (0) | 2021.07.22 |
[파이썬 크롤러] 셀레니움을 이용한 크롤링 (0) | 2021.07.22 |
[파이썬 크롤러] 웹 크롤러 만들기 (0) | 2021.07.21 |