본문 바로가기

Data Scientist

웹크롤링(Selenium) 간단한 검색, 네이버 로그인, yes24검색 후 장바구니 담기

반응형

Selenium

https://selenium-python.readthedocs.io/getting-started.html

  • 웹앱을 테스트하는데 사용하는 프레임 워크
  • Webdriver라는 API를 통해 다양한 브라우저를 제어
  • 브라우저를 직접 동작시킴으로써, Javascript를 이용해 비동기적인 컨텐츠를 가져올 수 있음
  • Requests 라이브러리와는 다른 동적 페이지의 결과 또는 접근 가능

설치 방법

1) pip install selenium (프롬프트에서)
2) https://selenium-python.readthedocs.io/installation.html 에서 크롬용 드라이버 다운로드
3) 다운로드 받은 zip파일 압축풀면 exe파일 나오는데 주피터 노트북 실행폴더에 저장
4) from selenium import webdriver
5) driver = webdriver.Chrome() => 파이썬 코드에 의해 제어된 크롬창이 열린다.

다운로드할 때 크롬의 정보를 통해 버전을 확인해서 설치한다. (우측 상단에 계정 명 옆에 '세로로 점 세개' 누르고 설정을 들어간 후 chrome 정보 확인)

실행 파일의 경로는 쥬피터노트북이 저장되는 경로에 있어야 한다. 

크롬을 눌러주면 위와 같이 버전에 따라 설치하도록 나눠져있다. 앞서 버전을 확인했기 때문에 두번째 파일로 설치한다.

os에따라서 설치를 해주면 된다. 나는 윈돌이

설치 후 압축을 풀어서 chromedriver.exe 파일을 .ipynb 쥬피터 노트북 파일들이 저장되는 경로에 옮겨주면 된다. 

 

보통 firefox에서 좀 더 안정적으로 구동된다는 말이 있다. 

firefox를 사용한다면 firefox용 드라이버(gecko driver)를 설치해야 한다. 

( https://github.com/mozilla/geckodriver/releases/tag/v0.26.0 )

 

오늘은 간단하게 메일을 보내는 것부터 해보자.

메일링 서비스 구축하기

먼저 selenium을 install 해주자. 윈도우키를 누르고 cmd 를 입력하면 커맨드 창이 나타난다.

conda install selenium 또는 pip install selenium 치고 엔터

이렇게 나오면 y를 입력해준다

이렇게 마지막에 다시 입력할 수 있게 프롬프트가 뜨면 설치 완료.

 

간단한 실습을 해보자.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# 브라우저 창 시작
driver = webdriver.Chrome()
url = "http://www.python.org"
driver.get(url)

코드를 실행하면 상단에 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다. 라고 뜨면서 자동으로 창이 켜진다.

개발자도구를 키고 싶다면 'F12'를 누르면 창이 분할되면서 뜨게 된다. 

elem = driver.find_element_by_name("q") # input 태그가 갖고 있는 속성 값으로 찾아줌
elem = driver.find_element_by_id("id-search-field") # 위랑 같은 결과가 나옴

elem

<selenium.webdriver.remote.webelement.WebElement 
(session="4686d50a150154c03638597be21d4350", element="a689f149-5536-4f00-b7f1-18f944f22820")>

이코드 중 위는 아래의 사진과 같이 input 태그가 갖고 있는 속성 중 name으로 찾을 때 'q'를 찾아주고 elem으로 할당한다. 아래의 코드는 id로 찾을 때, 'id-search-field'로 찾는 것이다. 결과적으로 두 줄의 코드는 동일한 결과 값으로 인터넷 창에서 저 검색어를 입력하는 칸을 찾는 것이다. 

 

elem.clear() # 검색창 다 지움
elem.send_keys("pycon") # 검색창에 검색어 입력

.clear()를 하면 검색창에 무언가 써져있는 것도 지워지게 된다. 

send_keys(' ')를 하면 따옴표 안의 내용을 입력하게 된다. 

 

흔히 검색창에 검색할 내용을 입력한 후에 enter키를 누르거나 직접 검색버튼을 클릭하는 것처럼 

여기서도 두가지를 사용할 수 있다. 

elem.send_keys(Keys.RETURN)

이 경우 엔터키를 누르는 경우이다.

버튼을 직접 클릭하는 것은 위의 검색창을 찾는 것과 같이 해당하는 버튼의 태그를 찾도록 해줘야 한다.

elem2=driver.find_element_by_id("submit")
elem2.click()

구성 요소 중에서 id가 submit인 것을 찾고 click해준다. 

검색을 하면 pycon이 들어간 검색 결과가 나온다. 

 

driver.close()

클로즈를 하면 크롬창이 닫힌다. 

 

각 종 명령어는 dir을 이용하면 확인해볼 수 있다. 

dir(driver)

 

다음으로는 네이버에 로그인을 시도해보자.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# 브라우저 창 시작
driver = webdriver.Chrome()
url = "http://www.naver.com"
driver.get(url)

# 아이디, 패스워드 로그인 창으로 이동하는 버튼 클릭

lg_btn=driver.find_element_by_class_name("lg_local_btn")
lg_btn.click()

# input 태그에 아이디 자동 입력
login_id = driver.find_element_by_id("id")
login_id.send_keys(" 각자 아이디 입력  ")

login_pw = driver.find_element_by_id("pw")
login_pw.send_keys("  각자 비밀번호 입력   ")

#입력후 로그인 버튼을 클릭
lg_btn=driver.find_element_by_class_name("btn_global")
lg_btn.click()

 

엘리먼트나 태그의 경우 언제든 바뀔 수 있지만 사용하는 방법은 같다.

 

yes24도 로그인 후 검색하고 상위 세개를 장바구니에 담아보자..

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()

#창 띄우기
driver.implicitly_wait(3)
url = 'https://www.yes24.com/Templates/FTLogin.aspx'
driver.get(url)

#로그인 하기
driver.find_element_by_id('SMemberID').send_keys(' 사용자 ID ')
driver.find_element_by_id('SMemberPassword').send_keys(' 사용자 비밀번호 ')
driver.implicitly_wait(3)

driver.find_element_by_xpath('//*[@id="btnLogin"]/span/em').click()

#검색창에 파이썬 입력 후 검색
driver.find_element_by_id('query').send_keys('파이썬')
driver.find_element_by_xpath('//*[@id="yesSForm"]/fieldset/span[2]/button').click()

driver.implicitly_wait(10)

# 상위 3개 체크 후에 장바구니에 담기
driver.find_element_by_xpath('//*[@id="divYes24SCMEvent"]/div[2]/div[2]/a/em/img').click() # 제휴 광고 닫기 
driver.find_element_by_xpath('//*[@id="schMid_wrap"]/div[2]/div[2]/table/tbody/tr[1]/td[3]/span/input[1]').click()
driver.find_element_by_xpath('//*[@id="schMid_wrap"]/div[2]/div[2]/table/tbody/tr[3]/td[3]/span/input[1]').click()
driver.find_element_by_xpath('//*[@id="schMid_wrap"]/div[2]/div[2]/table/tbody/tr[5]/td[3]/span/input[1]').click()
driver.implicitly_wait(3)
driver.find_element_by_xpath('//*[@id="schMid_wrap"]/div[2]/p/a[4]').click()

사용자 ID와 비밀번호를 수정해주고 코드를 실행하면 자동으로 로그인 후 파이썬을 검색하고 

위에서부터 3개의 책을 장바구니에 담는다. 

이렇게 장바구니에 잘 담겼다.. 

 

비슷한 내용으로 반복했지만 이 외에도 메일을 자동으로 보내게 하거나, 

다른 작업을 자동으로 수행하게 하는 것 또한 가능하다. 

 

😁

반응형

'Data Scientist' 카테고리의 다른 글

통계기초(빈도주의와 베이지안)  (0) 2020.03.01
html의 태그  (0) 2020.02.27
웹크롤링(Requests & BeautifulSoup)  (0) 2020.02.26
사이킷런 주요 모듈정리  (0) 2020.02.24
sklearn 기초 - 붓꽃 품종 예측하기  (0) 2020.02.23