goodthings4me.tistory.com
파이썬으로 selenium과 chrome webdriver를 사용하여 긴 웹 브라우저의 페이지를 자동으로 스크롤되게 하는 기능을 설명한다. 특히, 네이버 블로그의 경우 마우스를 내리면 계속해서 페이지가 스크롤되는데, 이에 대해 스크래핑(크롤링)할 때 유용하게 사용할 수 있다.
웹 브라우저 페이지 자동 스크롤링
▷url을 입력 시 웹 페이지 스크롤하는 함수
import time
import random
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
def webpage_scroll(url):
options = webdriver.ChromeOptions()
options.add_argument('--headless') # 실행 화면 안 보이게 처리
options.add_argument('--disable-gpu') # 브라우저의 화면 렌더링 사용 안함
# user-agent 지정은 headless 탐지하는 것을 막기 위함
options.add_argument('user-agent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62')
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome('./chrome_driver/chromedriver.exe', chrome_options=options)
driver.implicitly_wait(3)
driver.get(url)
elm_body = driver.find_element_by_tag_name('body')
prev_height = driver.execute_script('return document.body.scrollHeight') # 현재 화면(웹 페이지) 높이 리턴
## window.scrollTo(0, y) : 화면(웹 페이지) 지정 위치(y)로 스크롤
## window.scrollTo(0,document.body.scrollHeight) : 화면(웹 페이지) 가장 아래로 스크롤
scroll_cnt = 0
while True:
scroll_down = 0
for i in range(1, 11):
elm_body.send_keys(Keys.PAGE_DOWN) # body 요소에 대해 PgDn키를 누름
print(f'Scrolling... {i}')
time.sleep(random.uniform(0.1, 0.5))
scroll_down = i
curr_height = driver.execute_script('return document.body.scrollHeight')
scroll_cnt += scroll_down
print(f'scroll_cnt: {scroll_cnt}, current_height: {curr_height}')
if curr_height == prev_height:
print('\last_height: ' + str(prev_height) + '\n')
break
else:
prev_height = curr_height
if scroll_cnt >= 20:
break
driver.get_screenshot_as_file('webpage_screenshot.png')
driver.quit()
return scroll_cnt, curr_height
url = 'https://search.naver.com/search.naver?query=케스코&nso=&where=blog&sm=tab_opt'
result = webpage_scroll(url)
print(f'스크롤 수 : {result[0]}, Webpage Height : {result[1]}')
[결과]
Scrolling... 1
Scrolling... 2
Scrolling... 3
Scrolling... 4
Scrolling... 5
Scrolling... 6
Scrolling... 7
Scrolling... 8
Scrolling... 9
Scrolling... 10
scroll_cnt: 10, current_height: 8078
Scrolling... 1
Scrolling... 2
Scrolling... 3
Scrolling... 4
Scrolling... 5
Scrolling... 6
Scrolling... 7
Scrolling... 8
Scrolling... 9
Scrolling... 10
scroll_cnt: 20, current_height: 11858
크롬 옵션 중 options.add_experimental_option('excludeSwitches', ['enable-logging']) 부분은 "크롬 웹드라이브 '시스템에 부착된 장치가 작동하지 않습니다.' 메시지" 페이지 참조
테스트 페이지(네이버 블로그) 스크롤을 중간에 중단시키기 위해 while 문 마지막에 if 문 있음. 이 부분을 없앨 경우 해당 블로그 페이지 하단까지 가게 됨
if scroll_cnt >= 20:
break
블로그 인기글
엑셀 시트 분리 저장 - 엑셀 파일의 시트를 분리하여 저장하기
엑셀을 사용하다 보면 엑셀 시트를 분리해서 저장해야 할 때가 있다. 최근에도 이런 경우가 발생하여 구글링 후 엑셀 시트 분리 업무를 수행하고 내친김에 다른 사람들도 사용할 수 있도록 파이썬 tkinter로 프로그램으로 만들어 보았다. Excel Sheets 분리 저장하는 프로그램(with 파이썬 Tkinter) ※ 프로그램 다운로드(네이버 MYBOX에서 공유) : ExcelSeparateSheets.zip ▶ 프래그램을 실행하면 다음과 같이 초기 화면이 보인다. 찾아보기 : 엑셀 파일이 있는 폴더를 선택한다. (프로그램이 있는 최상위 디렉터리가 열린다) 실행하기 : 프로그램 실행 버튼 상태 변경 순서 : 실행전 → 실행 중 → Sheet "OOO" 분리 저장 중 → 실행 완료 실행 결과 확인 : 엑셀 파..
goodthings4me.tistory.com
폐업 신고 절차와 부가가치세 신고하는 방법
폐업 신고 시 세무서 안 가고 온라인으로 신고하는 방법인 '국세청 홈택스를 이용하여 폐업 신고하는 절차와 폐업 후 해야 하는 부가가치세 신고, 인건비 저리, 종합소득세 신고 등에 대해 포스팅합니다. 폐업 신고 시 홈택스 이용하는 방법과 부가가치세 등 신고 절차 여러가지 사유로 폐업을 해야 할 때, 예전에는 세무서를 방문해야 했지만 국세청 홈택스가 생긴 이후에는 사업자 등록이나 폐업 등을 인터넷으로 할 수가 있게 되었습니다. 특히, 코로나 시국인 요즘은 더더욱 온라인 신청 업무가 더 활성화되었죠. 폐업을 한다는 것 자체가 우울한 일인데, 발품을 파는 것보다는 커피 한잔 하면서 인터넷으로 간단하게 처리하는 게 좋을 듯하여 그 절차를 올려봅니다. 폐업은 폐업 신고와 함께 폐업 후 절차까지 모두 마쳐야 불이익이..
goodthings4me.tistory.com
유튜브 영상 등의 URL 주소를 QR코드로 만들기
네이버 QR코드, makeQR, MUST QRcode, 무료 온라인 QRCode 생성기 등의 웹사이트에서 유튜브 영상 등의 URL을 입력하여 QR코드를 만들 수 있다. QR코드를 생성할 수 있는 사이트와 프로그램 URL 주소를 붙여넣기 한 후 "QR 코드 생성" 버튼을 클릭하면 큐알코드가 이미지로 생성되고, 다운로드도 할 수 있는 사이트 https://truedoum.com/useful/qrcode/ # 유튜브에서 동영상 URL을 복사하는 방법 유튜브에서 QR코드를 만들 동영상을 검색한다. 해당 동영상을 클릭한다. 동영상 위에서 마우스 우클릭 후 나오는 팝업창에서 “동영상 URL 복사”를 클릭하거나 영상 하단의 “공유”를 클릭하여 나온 창에서 URL를 복사한다. 아래의 웹사이트 중 하나를 선택한 후 복사..
goodthings4me.tistory.com
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
단축 URL 스크래핑에 파이썬 비동기 처리 개념 적용해보기 (0) | 2022.01.07 |
---|---|
selenium으로 네이버 쿠키를 얻고 세션을 유지하는 방법 (2) | 2022.01.03 |
블로그 글 내용 저장 중 이모지 '\U0001f970' 에러 발생 (파이썬) (0) | 2021.12.26 |
파이썬 selenium 라이브러리 - find_elements_by_* commands are deprecated. (0) | 2021.12.25 |
크롬 웹드라이버 '시스템에 부착된 장치가 작동하지 않습니다.' 메시지 (0) | 2021.12.25 |
댓글