728x90
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from urllib.request import urlopen
from selenium.webdriver.common.keys import Keys
# selenium으로 DOM 에 접근하는 방법
- 단일 객체 반환(bs4의 find()와 같은 형태)
- find_element
- 리스트 객체 반환(bs4의 find_all()과 같은 형태)
- find_elements
# 웹 접속하기
url = "https://www.naver.com"
driver = webdriver.Chrome() #셀레니움이 크롬을 제어
driver.get(url) #url 접속
css_selector
- bs4의 select() 와 동일
url = "https://pjt3591oo.github.io"
driver = webdriver.Chrome()
driver.get(url)
selected = driver.find_element(by = By.CSS_SELECTOR, value = "div.home div.p")
print(selected)
print(selected.tag_name)
print(selected.text)
url = "https://pjt3591oo.github.io"
driver = webdriver.Chrome()
driver.get(url)
selected = driver.find_elements(by = By.CSS_SELECTOR, value = "div.home div.p")
print(selected)
없는 요소 접근
- bs4와는 다르게 없는 요소에 접근하면 에러를 띄움
url = "https://pjt3591oo.github.io"
driver = webdriver.Chrome()
driver.get(url)
selected = driver.find_element(By.CSS_SELECTOR, "aaa")
NoSuchElementException
※셀레니움을 쓰는 이유
1. 브라우저
2. 웹 제어 -> 1. 마우스 클릭
2. 키보드 입력
3. js실행
웹 제어
마우스 제어
url = "https://pjt3591oo.github.io"
driver = webdriver.Chrome()
driver.get(url)
title = driver.find_element(By.CSS_SELECTOR, "div.p a")
print(title)
print(title.text)
title.click()
<selenium.webdriver.remote.webelement.WebElement (session="4975c81905488f99f4f568992efec67e", element="f.4332562999F4BB6C70F37CF9702788E5.d.F1E3BB5762B81B32BD5C8013901A0B52.e.6")>
[programming] [react] react 작업환경 설
url = "https://pjt3591oo.github.io"
driver = webdriver.Chrome()
driver.get(url)
tags_a = driver.find_elements(By.CSS_SELECTOR, "a")
## //a로 a태그만 검색가능
for i in tags_a:
print(i.text, i.tag_name)
i.click()
Home a
StaleElementReferenceException
- 메인페이지에서 돔트리를 불러오고 다른 페이지로 넘어가면, 그 전에 가져온 페이지는 사용할 수 없게 됨
- 따라서 click을 페이지 이동 용도로 사용하는 것은 가급적 피하는 것을 추천
- 페이지 변화 없이 페이지 내에서 데이터가 변화되는 경우에 사용하는 것을 권장
키보드 제어
url = "https://pjt3591oo.github.io/search"
driver = webdriver.Chrome()
driver.get(url)
search_box = driver.find_element(By.CSS_SELECTOR, "input#search-box")
search_box.send_keys("test") #자연스럽게 입력하려면 특수키입력을 배워야함
selenium과 bs4의 조합
- page_source : 현재 웹 브라우저의 HTML 코드를 가져옴(HTML코드를 가져와서 bs4에 넘겨주기 위해)
url = "https://pjt3591oo.github.io/search"
driver = webdriver.Chrome()
driver.get(url)
search_box = driver.find_element(By.CSS_SELECTOR, "input#search-box")
search_box.send_keys("test") #자연스럽게 입력하려면 특수키입력을 배워야함
search_box.send_keys(Keys.ENTER) #엔터키 입력 #from seleniuhttp://m.webdriver.common.keys import Keys
#결과 정보를 bs4에 넘겨서 정보 수집
soup = BeautifulSoup(driver.page_source, "lxml")
items = soup.select("ul#search-results > li")
for i in items:
title = i.select_one("h3").string
description = i.select_one("p").string
print(title)
print(description)
print("-" * 10)
Structure aiohttp Of python
내용을 시작하기 앞서 python에 하면 가장 많이 떠오르는 서버 프레임워크로는 django나 flask가 있을 것이다.하지만 블로그 주인놈은 특정 프로젝트에서 굉장히 빠른 응답속도를 내야하는 API서버를 구축을 하여야 하는 상황이 있었다.이때 굉장히 많은 서버 프...
----------
Structure Express Of Node
Express Frameexpress는 node.js에서 제공하는 프레임워크.express-genderator를 설치를 통해 express 프로젝트 생성이 가능하다.아래의 내용은 Mysql 혹은 MariaDB, MongoDb(mongodb모듈을 통해 로우단에서 mong...
----------
파일 리더기 만들기 - pdf를 html로 변환, docx를 pdf로 변환
파일 리더기를 만들고 있다.우선 rtf와 docx 직접적으로 처리를 하려고 했으나 매우 거지 같아서 pdf로 변환을 거친 후 처리를 하기로 했다.이번에는 pdf 파일을 html 파일로 바꿔주는 방법, docx파일을 pdf파일로 바꿔주는 방법에 대해서 다뤄보고자 합니다....
----------
Javascript Asynchronous, synchronous and Promise
동기, 비동기 그리고 promiseAsynchronous(비동기) Code란 무엇일까? node를 접하지 않았다면 대부분의 개발자들은 동기방식의 코드에 익숙할 것이다. 다음 코드를 보면 이해하기 쉬울 것이다.void FTest(){ for(int i = 0 ; i...
----------
[react] react 작업환경 설
react-boilerplate 사용방법해당 프로젝트는 일반적인 react를 사용하기 전에 이런저런 환경설정을 미리 셋팅을 해둔 프로젝트 입니다. 해당 프로젝트는 아래의 설정들을 거쳐 해당 명령어만 실행을 해주면 일반적인 react 프로젝트를 실행 시킬 수 있습니다.1...
----------
JavaScript 실행
url = "https://pjt3591oo.github.io/search"
driver = webdriver.Chrome()
driver.get(url)
driver.execute_script('alert("test")') # 경고창을 띄우는 JavaScript 함수
스포츠 데이터 크롤링
######bs4를 쓰면 추가 데이터가 안 들어옴(추가 데이터가 원하는 데이터 이므로)
url = "https://www.livesport.com/kr/team/lotte-giants/pGw4ggkO/"
page = urlopen(url)
soup = BeautifulSoup(page, "lxml")
soup.select("span.wcl-simpleText_Asp-0")
#############################
[]
##운이 좋을 때 데이터가 들어오고 안들어오는 상태를 방지하기 위해
## 대기를 걸어야함
##대기(우리는 1, 2를 사용함)
# 1. time.sleep(2) #2초면 웬만한 정보가 다 받아와짐
# 2. 묵시적 대기(get방식)
# 3. 명시적 대기(~~요소가 화면에 나타날 때까지 기다리겠다) ※제일 있어빌리티하지만, 난도가 있음
driver = webdriver.Chrome()
driver.get(url)
driver.implicitly_wait(3) #서버에서 데이터가 다 불러와질 때까지 최대 3초 대기
soup = BeautifulSoup(driver.page_source, "lxml")
[i.string for i in soup.select("span.wcl-simpleText_Asp-0")]
['승', '패', '승', '패', '승', '패', '승', '패', '패', '패']
별다방 코리아
url = "https://www.starbucks.co.kr/store/store_map.do?disp=locale"
driver = webdriver.Chrome()
driver.get(url)
driver.implicitly_wait(3)
sido = driver.find_elements(By.CSS_SELECTOR, "a.set_sido_cd_btn")
sido[0].click()
time.sleep(1)
gugun = driver.find_elements(By.CSS_SELECTOR, "a.set_gugun_cd_btn")
gugun[13].click()
time.sleep(1)
soup = BeautifulSoup(driver.page_source, "lxml")
store = soup.select("li.quickResultLstCon > strong")
for i in store:
print(i.string)
728x90
'01_Python' 카테고리의 다른 글
| 55_파이썬(Python) API 사용법_네이버 블로그 (3) | 2025.03.11 |
|---|---|
| 54_파이썬(Python) API 사용법_영화진흥위원회 (1) | 2025.03.11 |
| 52_셀레니움(selenium)설치 (0) | 2025.01.16 |
| 51_정적 크롤링 (0) | 2025.01.15 |
| 50_요청 모듈 (2) | 2025.01.15 |