티스토리 뷰
안녕하세요 종백이 입니다😎
웹상에서 반복적인 단순 업무로 지루함을 느끼시고 계신가요?? 메크로를 이용해 클릭을 하는 방법도 있겠지만 오늘은 지난번 글에 말한 것 같이 셀레니움을 이용하여 크롤링하는 방법에 대해 이야기해보려고 합니다!
[파이썬] selenium 또는 requests를 이용한 동적 크롤링 python crawling
안녕하세요 종백이 입니다😎 올해부터 사업을 시작하면서 여러 사이트의 정보를 갖고 와야 했고 그 과정에서 얻은 경험을 공유해 보려고 합니다ㅎㅎ 우선 전공자가 아니기 때문에 장점이나 단
jcstory94.tistory.com
우선 셀레니움은 웹에서 자동화를 위해 만들어진 프레임 워크이고 파이썬으로 사용하는 방법에 대해 이야기해보려고 합니다!
시작하기에 앞서 셀레니움을 사용할 때 항상 import 해주는 것들에 대해 말해보려고 합니다.
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import chromedriver_autoinstaller
from selenium import webdriver
위에서부터 하나씩 설명을 해보자면 EC는 WebDriverWait를 사용할 때 같이 쓰는 모듈입니다. 예를 들어 정해놓은 element들이 모두 로딩될 때까지(지정된 곳에 위치될 때까지) 기다려줘 할 때 EC.presence_of_located 등 기능을 사용합니다. EC에는 여러 조건들이 있어서 한번 구체적인 게 어떤 것이 있는지 보는 것도 좋을 것 같네요 ㅎㅎ
Keys는 웹 상에 글을 작성할 수 있는 상자에 키보드로 작성한 것처럼 글을 전송할 수 있습니다. element.send_keys("보낼 내용") 방식으로 HTML 상 input box의 element를 지정하여 보낼 수 있습니다.
By는 element를 지정할 때 사용합니다.
driver.find_element(By.ID, "ID")와 같이 사용합니다.
chromedriver_autoinstaller는 chrome driver를 매번 업데이트마다 다시 다운로드하는 게 귀찮아서 자동으로 다운해주는 모듈입니다 ㅎㅎ
이제 위 모듈을 이용해서 사용 방법에 대해 이야기해보겠습니다 ㅎㅎ 예제를 위해 네이버 메인화면에서 로그인하는 방법 및 특정 위치 글을 갖고 와보겠습니다!
우선 첫 번째 할 일은 크롬드라이브를 장착해 줍니다.
driver = webdriver.Chrome("드라이브 위치/chromedriver.exe")
만일 파이썬 스크립트와 크롬드라이브위치가 같은 폴더에 있다면 webdriver.Chrome()만 하셔도 됩니다.
크롬 드라이브를 장착한 후에는 네이버 메인 화면으로 이동을 해야겠죠?!
driver.get("https://www.naver.com")
위 코드를 실행하면 네이버 메인 화면으로 넘어갑니다. 우리는 로그인을 하기 위해 로그인 버튼을 눌러줍니다!

네이버 로그인 버튼을 누르기 위해서는 element를 지정 후에 이 element를 눌러줘!라고 셀레늄으로 요청을 해야 합니다. element는 각자 className 또는 ID를 갖고 있으므로 위 import에 사용한 By를 써서 element를 지정하면 됩니다.
loginBtn = driver.find_element(By.CLASS_NAME,"link_login")
위처럼 element를 지정할 수 있습니다. 그 후 click을 요청하면 버튼을 누를 수 있습니다!
loginBtn.click()
로그인 버튼을 누르면 로그인 화면으로 넘어가게 됩니다. 여기서 아이디와 비밀번호를 입력하는 곳에 위에 import 한 Keys를 이용해 아이디와 비밀번호를 입력할 수 있습니다. 여기서는 ID를 이용해 보겠습니다! 아이디 입력칸의 id는 id이고 비밀번호 입력칸의 id는 pw입니다!
idElement = driver.find_element(By.ID, "id")
pwElement = driver.find_element(By.ID, "pw")
idElement.send_keys("아이디")
pwElement.send_keys("비밀번호")
위와 같이 입력하면 아이디와 비밀번호 입력칸에 아이디와 비밀번호를 입력할 수 있게 됩니다.
마지막으로 로그인 버튼의 className인 btn_login을 통해 element를 지정하고 click을 하면 로그인을 할 수 있게 됩니다.
loginBtn2 = driver.find_element(By.CLASS_NAME, "btn_login")
loginBtn2.click()
아주 간단하죠?? 특정 element 지정 및 명령만 하면 됩니다 ㅎㅎ 크롤링도 이 방식으로 원하는 데이터가 있는 element 지정 및 element.text의 명령으로 해당 element가 갖고 있는 글귀를 갖고 올 수 있게 됩니다.
위 내용을 쭉 해보다가 오류가 날 수 도 있는데요! 그 이유는 화면이 완전히 로딩되기 전에 명령어를 실행해서 아무것도 없는데 className을 찾으라고 하니 오류가 자주 납니다. 이럴 때 webDriverWait을 사용합니다!
네이버 메인 페이지에서 로그인 화면으로 전환할 때 id 입력 칸이 나타날 때까지 기다려주고 30초 지날 때까지 로딩 안되면 오류를 내줘! 하는 명령문을 작성해 보겠습니다.
WebDriverWait(driver,30).until(EC.presence_of_element_located(By.ID,"id"))
driver옆에 30은 점점 늘려나갈 수 있고 60으로 바꾸면 1분 동안 id가 위치되지 않으면 오류가 납니다 ㅎㅎ 위 내용을 한번 쭉 작성해 보겠습니다!
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import chromedriver_autoinstaller
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.naver.com")
loginBtn = driver.find_element(By.CLASS_NAME,"link_login")
loginBtn.click()
WebDriverWait(driver,30).until(EC.presence_of_element_located(By.ID,"id"))
idElement = driver.find_element(By.ID, "id")
pwElement = driver.find_element(By.ID, "pw")
idElement.send_keys("아이디")
pwElement.send_keys("비밀번호")
loginBtn2 = driver.find_element(By.CLASS_NAME, "btn_login")
loginBtn2.click()
위와 같이 작성하면 로그인을 할 수 있게 됩니다.
글 내용이 도움이 되셨다면 좋아요 부탁드립니다 ㅎㅎ
'독학 > python' 카테고리의 다른 글
[파이썬] cx_freeze pyinstaller 실행 파일 배포 .exe 만들기: on console 'NoneType' object has no attribute write error 해결 방법 (0) | 2023.04.12 |
---|---|
[파이썬] requests 모듈을 사용한 python동적크롤링 따라하기 (0) | 2023.03.12 |
[파이썬] selenium 또는 requests를 이용한 동적 크롤링 python crawling (0) | 2022.11.12 |
[파이썬] 네이버 커머스 API requests post로 서버에 이미지 보내기 (8) | 2022.11.12 |
- Total
- Today
- Yesterday
- 경매참고자료
- javascript
- flutter네이버커머스api
- javascript독학
- 책추천
- 경매동향
- 파이썬셀레니움
- 파이썬독학
- 자바스크립트독학
- 상위노출프로그램
- 주식독학
- 수부지추천
- CNC업그레이드
- 파이썬실전
- 책리뷰
- 눈시림없는선크림
- 그림독학
- 웹앱독학
- JS독학
- GRBL
- 주식시장거품
- 네이버커머스api
- 제로이드
- 브리타정수기
- 주식종목
- 인플레이션
- selenium
- 파이썬
- 프로그래밍독학
- 주식분석
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |