selenium
브라우저 제어
- 내가 필요한 정보를 얻기 위해 로그인, 스크롤 등의 브라우저 동작이 필요할 때 selenium을 이용하자
- 웹 스크래핑 뿐만 아니라 브라우저 제어 기능을 응용하면 정해진 시간에 게시판에 글을 작성하는 등 다양한 업무를 자동화 할 수 있다.
-bs4와 requests 만으로 스크래핑이 잘 안되는 이유가 있는데 그 둘은 스캔본을 받아서 하 듯 정적인 부분만을 가져와 스크래핑을 하기 때문이다.
-동적인 웹페이지를 스크래핑 할 때는 브라우저에 띄운 후 소스코드를 가져오는 방법을 써야하기 때문에 selenium을 사용해 보자
예시) 셀레니움 적용
from bs4 import BeautifulSoup
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome('./chromedriver') # 드라이버를 실행합니다.
url = "https://www.melon.com/chart/day/index.htm"
# headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
# data = requests.get(url, headers=headers)
driver.get(url) # 드라이버에 해당 url의 웹페이지를 띄웁니다.
sleep(5) # 페이지가 로딩되는 동안 5초 간 기다립니다.
req = driver.page_source # html 정보를 가져옵니다.
driver.quit() # 정보를 가져왔으므로 드라이버는 꺼줍니다.
tip) 특정 태그 없에기
likes_tag = song.select_one("td > div > button.like > span.cnt") #멜론에서 필요없는 부분
likes_tag.span.decompose() # span 태그 없애기
likes = likes_tag.text.strip() # 텍스트화한 후 앞뒤로 빈 칸 지우기
-브라우저 제어
예시) 스크롤과 버튼
from bs4 import BeautifulSoup
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome('./chromedriver')
url = "https://search.naver.com/search.naver?where=image&sm=tab_jum&query=%EC%95%84%EC%9D%B4%EC%9C%A0"
driver.get(url)
sleep(3)
req = driver.page_source # 해당 페이지를 req라는 변수에 넣기
driver.quit()
soup = BeautifulSoup(req, 'html.parser')#다음 스크래핑
images = soup.select(".tile_item._item ._image._listImage")
print(len(images))
for image in images:
src = image["src"]
print(src)
tip) 스크롤 내리기 /버튼 클릭하기
driver.execute_script("window.scrollTo(0, 1000)") # 1000픽셀만큼 내리기
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") #맨 밑까지 내리기
btn_more = driver.find_element_by_css_selector("#foodstar-front-location-curation-more-self > div > button")
btn_more.click()#버튼을 찾아 클릭
time.sleep(5)
for i in range(10): # 10번
try: #시도
btn_more = driver.find_element_by_css_selector("#foodstar-front-location-curation-more-self > div > button")
btn_more.click()
time.sleep(5)
except NoSuchElementException: #더이상 가져올 것이 없습니다 일시 브레이크
break
-특정 카드에 id값을 집어넣기
function make_card(i, matjip)
let html_temp = `<div class="card" id="card-${i}"> //id값에 i번째 순서를 넣자
<div class="card-body">
<h5 class="card-title"><a href="#" class="matjip-title">${matjip['title']}</a></h5>
<h6 class="card-subtitle mb-2 text-muted">${matjip['category']}</h6>
<p class="card-text">${matjip['address']}</p>
<p class="card-text" style="color:blue;">${matjip['show']}</p>
</div>
</div>`;
$('#matjip-box').append(html_temp);
}
-특정 00이 보이게 스크롤 움직이기(예시:카드)
$("#matjip-box").animate({ //애니메이션
scrollTop: $("#matjip-box").get(0).scrollTop + $(`#card-${i}`).position().top
}, 2000); // 2000=2초 , 스크롤이 포함하고 있는 높이에서내가 선택한 카드가 있는 그 카드의 제일 위 값 그 높이
※a 태그를 클릭했을 때 새 창이 뜨는 게 아니라 javascript 함수를 실행하고 싶다면
<a href="javascriptL실행함수명()">..
반응형
'정리' 카테고리의 다른 글
12 TIL 정리(해시함수,JWT) (0) | 2022.05.08 |
---|---|
14-TIL 정리(카카오지도, 2주차 타임어택구현테스트) (0) | 2022.05.06 |
10TIL 정리 (Jinja2,나만의 단어장) (0) | 2022.04.28 |
9 TIL 정리(파일 업로드) (0) | 2022.04.28 |
8-2 TIL 정리(AWS) (0) | 2022.04.28 |