팀내 프로젝트에서 셀레니움을 배제하기로 결정된 상황에서 도저히 다른 방법을 못찾고 있었는데 헤드리스가 디폴트인 모듈을 찾았다.
import requests
from bs4 import BeautifulSoup
import time
import sys
sys.path.append("/Users/JaeSung/.pyenv/versions/3.9.4/lib/python3.9/site-packages")
from playwright.sync_api import sync_playwright
#(1)
window_headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
}
url ="https://display.cjonstyle.com/event/c/rest/jspModule/getCouponBenefitInfo"
data = requests.get(url, headers=window_headers)
data = data.json()
link_arr =[]
link_url =data['result']['cardList']
for i in link_url:
each_link= i['exhibitionUrl']
link_arr.append(f"https:{each_link}")
print(link_arr)
num =0
for i in link_arr:
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto(f"{i}",timeout = 0)
# page.is_visible('div.module_div')
#(2)
time.sleep(6)
#(3)
# page.set_viewport_size({"width": 1500, "height": 2000})
#(4)
# page.set_default_timeout(3000)
page.screenshot(path=f"img_cj/{num}.png", full_page=True)
#(5)
browser.close()
num = num+1
(1) 처음 playwright 설치 후에 no module 에러 메세지를 겪고 찾아낸 방법으로 해결함
(2) 필요한 페이지를 돌아가면서 접속하고 스크린샷 해야되는데 화면이 전부 출력되기 전에 캡처되는 문제가 생겼다.
이 문제로 거의 4시간을 소모하고 찾아낸 방법인데. 결국 내 문제에는 맞는 해결법이 아니었다
(3) playwright의 공식문서에 나온 해결책만 있다고 생각했는데, 이전에 사용한 time.sleep을 이용하자 (2)번에서 겪은 문제가 말끔히 해결되었다
(4)(5) 캡처화면의 크기를 결정하는 명령어인데 이 보다 full_page=True가 훨씬 간결하고 직관적이라서 바꾸었다
파이썬 오늘 날짜로 폴더명 만들기(2개 방법) (0) | 2023.04.04 |
---|---|
sort 하고 sorted (0) | 2023.03.29 |
파이썬 json.loads 두 번해서 str에서 dict로 바꾸기 (0) | 2023.03.29 |
셀레니움 활용한 화면 캡쳐에서 오류 해결 (0) | 2023.03.22 |
ajax 결과 파이썬으로 크롤링 하기 (0) | 2023.03.13 |