selenium 소기 (프록시/헤드리스)

8412 단어 파이썬셀레늄


배경



selenium에서 다양한 작업을 할 때 얻은 지식의 메모

↓ 도입 방법
Selenium WebDriver 설치 ~ 이동해보기

덧붙여서 파이썬이라면 이런 느낌으로 폭속으로 시작하는 것도 가능
$ pip install selenium

# または
$ conda install selenium

베이스


from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()

부팅 옵션



--headless를 부여하여 헤드리스 모드로 부팅 가능
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)

--no-sandbox를 부여하여 샌드박스 외부에서 동작
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(options=options)

프록시 설정
option.add_argument('--proxy-server=http://%s' % PROXY)
option.add_argument('--proxy-auth=%s' % PROXY_AUTH)
driver = webdriver.Chrome(options=options)

기존 창의 새 탭에서 열지 않고 새 창에서 열도록 설정
options.add_argument('--new-window')
driver = webdriver.Chrome(options=options)

onclick 속성으로 발화되는 js 실행



selenium에서 버튼계의 자동화하고 있을 때가 있는 것 같다.
js를 실행시키고 싶은 경우는 버튼 클릭이나 하지 않고도 아래와 같이 직접 실행이 가능
browser.execute_script('javascript:hogehoge();')

iframe 스위치


iframe = driver.find_element_by_id('wpnt-notes-iframe2')
# 取得したインラインフレームにスイッチ
driver.switch_to.frame(iframe)

quit과 exit의 차이



"driver.close()"
활성화된 탭만 종료.

"driver.quit()"
모든 탭을 닫고 브라우저를 종료합니다.

docker-selenium



selenium은 섬세한 상태에서 넣으면 조금 번거로운 절차가 필요합니다.
docker 같은 느낌으로 빨리 사용할 수 있을까라고 생각하고 조사하면 존재했습니다.

docker-selenium을 사용하여 본

VNC를 사용하여 내부에서 크롬을 움직이고 거기에서 작동하는 것 같습니다.
파일의 공유도 도커의 지식만 있으면 간단하게 할 수 있어 매우 편리할 것 같습니다.

VNC용의 컨테이너와 브라우저 테스트용의 컨테이너를 준비하는 것으로 개발 환경과는 분리된 테스트 환경도 이런 느낌으로 빨리 준비할 수 있군요.
version: '3.7'

services:
  chrome-server:
    build:
      context: ./chrome
      dockerfile: Dockerfile
    container_name: 'chrome-server'
    hostname: 'chrome-server'
    ports:
      - 9000:5900
      - 4444:4444
    environment:
      - 'TZ=Asia/Tokyo'
      - 'HUB_PORT_4444_TCP_ADDR=hub'
      - 'HUB_PORT_4444_TCP_PORT=4444'
    volumes:
      - ./chrome/downloads:/root/Downloads
  py-server:
    build:
      context: ./py-server
      dockerfile: Dockerfile
     container_name: 'py-server'
     hostname: 'py-server'
     environment:
       - 'TZ=Asia/Tokyo'
     tty: true
     depends_on:
       - chrome-server
     volumes:
       - ./py-server/src:/app/src
       - ./py-server/images:/app/images
     env_file:
       - app.env

브라우저 테스트 환경이 docker로 완결되어 버리는 것은 매우 편리합니다.

참고



크롬 시작 옵션
【Python】Selenium에서 iframe의 내용을 조작한다
Chrome DevTools를 잘 사용하자! 웹 개발에 필수적인 브라우저 개발 툴에 의한 디버그의 기본

좋은 웹페이지 즐겨찾기