Selenium이란?
Selenium(셀레늄)은 웹 애플리케이션 테스트를 위한 포터블 프레임워크이다. 웹 크롤링을 할 때, 사용하기 편리하다.
<Selenium 설치>
selenium을 설치하기 위해서는 두가지 방법이 있습니다.
pip install selenium

위와 같이 cmd 창을 통해 해당 project가 생성되어 있는 폴더에 들어가서 설치하는 방법이 있다.

[File]-[Settings]에 들어가면 위와 같은 창이 뜬다. 오른쪽에 +를 누른다.

selenium을 검색해서 아래 Install Package 버튼을 눌러도 설치할 수 있다.
<ChromeDriver 설치>
https://sites.google.com/a/chromium.org/chromedriver/downloads
해당 사이트에 들어가면 설치할 수 있다.

Current Releases라고, 여러 파일들이 있고, 파란 글자를 누르면 운영체제에 맞게 다운로드 할 수 있다.

윈도우 기반으로 개발을 진행하므로, chromedriver_win32.zip을 다운로드 한다.
해당 파일을 다운로드하고, zip파일 압축을 풀어준다.
잠시 후, 소스를 짤 때, 해당 파일의 경로가 필요합니다. 따라서 저는 기억하기 쉽게 파이썬 프로젝트가 있는 파일로 chromedriver 파일을 옮겼습니다.
따라서, chromedriver의 경로는 C:\Users\userpc\PycharmProjects\chromedriver 입니다.
여기서 중요한 점이 하나 있습니다.
크롤링하고 있는 현재 창을 보면서 진행할 수가 있고, 창을 닫아놓은채로 진행할 수 있습니다.
이 때, 중요한 점이, 창을 보면서 진행하기 위해서는 chromeDriver와 현재 본인이 사용하고 있는 chrome의 버전이 같아야합니다.
chrome 버전 확인을 위해서는 chroome의 오른쪽 상단을 보면 점 3개가 있는걸 보실 수 있습니다.

[점3개 클릭]-[도움말]-[Chrome정보]를 클릭하시면, Chrome의 버전을 볼 수 있고, ChromeDriver와 Chrome의 버전이 다르다면 Chrome 업데이트 버튼을 클릭하여 업데이트를 진행해주시기 바랍니다.
이제 Selenium 크롤링을 위한 기본 준비는 끝마쳤습니다.
<Selenium 크롤링 - Driver 연결>
from selenium import webdriver
#다운받았던 chromedriver의 위치를 입력하면 됩니다.
driver = webdriver.Chrome(r'C:\Users\userpc\PycharmProjects\chromedriver.exe')
경로 앞에 r을 입력하면, \이 입력되지 않는 경우를 방지할 수 있으므로, r을 입력하시길 권장드립니다.
from selenium import webdriver
driver = webdriver.Chrome(r'C:\Users\userpc\PycharmProjects\chromedriver.exe')
driver.implicitly_wait(2)
driver.implicitly_wait(2)는 driver가 연결되도록 잠시 기다려주는 시간입니다.
해당 코드를 실행하면 data;라는 url을 가진 빈 화면의 chrome 창이 하나 뜰겁니다.
그렇다면 chromedriver 연결에 성공했습니다.
<selenium 크롤링 - url 연결>
이제 특정 url에 연결해보겠습니다.
from selenium import webdriver
driver = webdriver.Chrome(r'C:\Users\userpc\PycharmProjects\chromedriver.exe')
driver.implicitly_wait(2)
driver.get('https://daum.net')
해당 소스를 실행하면 아까처럼 새로운 chrome 창이 하나 뜨고, https://daum.net에 연결되는걸 눈으로 확인할 수 있습니다.
driver.get(url)의 url에 본인이 연결하고 싶은 url을 입력하면, 해당 사이트로 이동할 수 있습니다.
해당 사이트에 로그인 하기 위해,
1) 메인화면에서 파이썬 소스로 로그인 클릭 후 로그인 진행하는 방법,
2) 로그인 창을 띄워서 로그인을 진행하는 방법 두 가지 모두 진행하겠습니다.
같은 방법이지만 1)에서는 메인화면에서 카카오계정 로그인을 클릭하는 과정이 있으므로, 먼저 설명드린 후에, 로그인 하는 과정을 보여드리겠습니다.
먼저, 메인화면에서 파이썬 코드를 짜서, 로그인창으로 넘어가보겠습니다.
코드를 알아보기 위해 F12 를 통해 개발자 모드로 들어가보겠습니다.
왼쪽 위에 네모안에 화살표가 있는 모양을 누르시고, 소스의 위치를 알고싶은 곳을 클릭하면 해당 부분의 소스를 바로 알 수 있습니다.
저는 카카오 계정 로그인으로 진행하겠습니다.

해당 부분의 소스에서 마우스 오른쪽 클릭 후, [copy]-[copyxpath]를 선택하시면 click을 진행할 수 있습니다.
driver.get('https://daum.net')
driver.find_element_by_xpath('//*[@id="inner_login"]/a[2]').click()
copyxpath 후, driver.find_element_by_xpath()에 본인이 카피한 xpath를 입력하고, click() 메소드를 입력합니다.
소스를 실행하면 [새로운 크롬 창 생성]-[다음 창]-[카카오 계정 로그인 클릭] 하는 과정을 눈으로 보실 수 있습니다.
<아래부터는 1번과 2번의 진행과정이 같습니다>
로그인 화면에서도 마찬가지로, 개발자 도구를 통해 [마우스 오른쪽 클릭]-[copy]-[copyxpath]를 합니다.
driver.get('https://daum.net')
driver.find_element_by_xpath('//*[@id="inner_login"]/a[2]').click()
login = driver.find_element_by_xpath('//*[@id="loginEmailField"]/div/label')
login.clear()
login.send_keys("*************")
xpath에는 본인이 복사한 xpath를 입력하고, login.send_keys()안에는 본인이 로그인할 계정을 넣습니다.
같은 방법으로 비밀번호도 입력합니다.
driver.get('https://daum.net')
driver.find_element_by_xpath('//*[@id="inner_login"]/a[2]').click()
#카카오 계정 입력
login = driver.find_element_by_xpath('//*[@id="loginEmailField"]/div/label')
login.clear()
login.send_keys("*************")
#비밀번호 입력
login = driver.find_element_by_xpath('//*[@id="id_password_3"]')
login.clear()
login.send_keys("*************")
복사한 xpath를 입력 후, login.send_keys()에는 로그인할 비밀번호를 입력합니다.
비밀번호 입력 후 로그인 버튼을 클릭해야겠죠??
동일한 방법으로 로그인 버튼의 xpath를 복사 후,
driver.find_element_by_xpath('//*[@id="login-form"]/fieldset/div[8]/button').clck()
를 추가한 후 실행하면, 로그인까지 진행되는걸 볼 수 있습니다.
from selenium import webdriver
driver = webdriver.Chrome(r'C:\Users\userpc\PycharmProjects\chromedriver.exe')
driver.implicitly_wait(2)
driver.get('https://daum.net')
driver.find_element_by_xpath('//*[@id="inner_login"]/a[2]').click()
login = driver.find_element_by_xpath('//*[@id="loginEmailField"]/div/label')
login.clear()
login.send_keys("*************")
login = driver.find_element_by_xpath('//*[@id="id_password_3"]')
login.clear()
login.send_keys("*************")
driver.find_element_by_xpath('//*[@id="login-form"]/fieldset/div[8]/button').clck()
최종 소스입니다.
driver.find_element_by_xpath 외에, find_element_by_id 로도 진행할 수 있습니다.
find_element_by_id의 경우에는 div의 ID를 명확하게 알 수 있는 경우에는 무리없이 사용할 수 있지만, ID가 명확하지 않은 사이트들이 있습니다.
그래서 저는 xpath를 이용하여 진행했습니다.
<크롤링 진행하기>
메인 화면의 헤드라인 기사를 수집해보겠습니다.
해당 페이지의 source를 수집하기 위해, beautifulSoup를 이용해야합니다.
먼저,
from bs4 import BeautifulSoup
를 입력합니다.
html = driver.page_source
html에 해당 사이트의 source를 넣습니다.
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
headlines = soup.select('#realestate > div.news_prime > div')
[copy]-[copyselector']를 진행하여 soup.select에 입력합니다.
driver.get('https://daum.net')
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
headlines = soup.select('#news > div.news_prime.news_tab1.\#newsbox.\#news1 > div > ul')
for headline in headlines:
print(headline.text)
headlines는 list 형식으로 저장되어있으므로, print를 진행하면,

제목만 가져온걸 콘솔 창에서, 눈으로 볼 수 있습니다.
'Developer > Develop' 카테고리의 다른 글
[Jenkin/젠킨스] Spread load evenly by using ... rather than (0) | 2023.10.19 |
---|---|
인프라 아키텍처에 대해서 (0) | 2021.02.01 |
intelliJ - git 연동하기 (0) | 2021.01.12 |