상세 컨텐츠

본문 제목

playwright 로 동적 화면 캡쳐하기 (셀레니움의 대안)

백엔드/파이썬

by 호치민 개발자 2023. 3. 30. 15:17

본문

팀내 프로젝트에서 셀레니움을 배제하기로 결정된 상황에서 도저히 다른 방법을 못찾고 있었는데 헤드리스가 디폴트인 모듈을 찾았다. 

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가 훨씬 간결하고 직관적이라서 바꾸었다

 

관련글 더보기