Dcoker + python/selenium에서 자동차 가게의 웹 페이지의 전체 화면 스크린 샷을 가져옵니다.
소개
WEB 페이지의 전체 화면 스크린 샷을 손쉽게 찍고 싶어지고 시험해 보았습니다.
docker/docker-compose는 별도로 설치하십시오.
등장인물
실행 준비
클라이언트 PC에 준비할 파일
다음 파일을 준비합니다.
- Dockerfile
- docker-compose.yml
- get-sc-website.py(※후술)
Dockerfile (python3 실행 용 컨테이너)
Docker 호스트 ⇄ python3 실행 컨테이너에서 파일을 교환 할 수 있도록하십시오.
Dockerfile
FROM python:3
RUN pip install --upgrade pip && pip install selenium
ADD . /opt
WORKDIR /opt
docker-compose (python / selenium 용)
selenium은 단일 노드에서 시작됩니다.
Firefox/Opera의 selenium 노드를 원하면 추가하십시오.
docker-compose.yml
version: '3'
services:
python3:
restart: always
build:
context: .
dockerfile: ./Dockerfile
container_name: 'python3'
working_dir: '/root/'
tty: true
volumes:
- ./opt:/root/opt
chrome:
image: selenium/node-chrome:4.0.0-beta-1-20210215
volumes:
- /dev/shm:/dev/shm
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
ports:
- "6900:5900"
selenium-hub:
image: selenium/hub:4.0.0-beta-1-20210215
container_name: selenium-hub
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
docker compose로 시작
docker pull python:3
docker compose up -d
파이썬 파일 준비
python3 실행 컨테이너에 배치합니다. 대상 WEB 페이지는 샘플입니다.
get-sc-website.py
import os
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import WebDriverException
def screenshot(driver, filename):
w = driver.execute_script('return document.body.scrollWidth')
h = driver.execute_script('return document.body.scrollHeight')
driver.set_window_size(w, h)
driver.save_screenshot(filename)
if __name__ == '__main__':
## set capabilities
capabilities = DesiredCapabilities.CHROME.copy()
driver = webdriver.Remote(
## set selenium server
command_executor='http://selenium-hub:4444',
desired_capabilities=capabilities
)
website = ['https://toyota.jp/',
'https://www.suzuki.co.jp/']
## get website
try:
## increments of website[]
i=0
for filename in website:
print(website[i])
driver.get(website[i])
filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), website[i].replace('/','').replace(':','')+".png")
## get screenshot
screenshot(driver, filename)
i+=1
driver.quit()
except WebDriverException:
print('cannot get webpage')
docker에서 python 실행
파이썬 용 컨테이너에 배치하고 스크레이프 실행
mv ./get-sc-website.py ./opt
docker exec -it python3 python opt/get-sc-website.py
실행 결과
잠시 기다리면 ./opt 폴더에 <사이트 URL.png>로 이미지가 출력됩니다.
(selenium은 실행 속도가 느립니다)
끝에
web의 URL을 바꾸면, 응용할 수 있으므로, 꼭 한번 시험해 봐 주세요!
selenium4.0이 된 후 요청 URL이 변경되었습니다.
2.X/3.X) command_executor='http://localhost:4444/wd/hub'
4.X) command_executor='http://localhost:4444/'
Reference
이 문제에 관하여(Dcoker + python/selenium에서 자동차 가게의 웹 페이지의 전체 화면 스크린 샷을 가져옵니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aoen210/items/a397cb415a4a51b1602f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)