Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?
@ryuichi1208

selenium小技 (プロキシ/ヘッドレス)

More than 1 year has passed since last update.

selenium-logo-150x150.png

背景

seleniumで色々作業した時に得た知見のメモ

↓導入方法
Selenium WebDriverのインストール~動かしてみる

ちなみにpythonならこんな感じで爆速で始めることも可能

$ 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を使ってその内部でchromeを動かしそこで動作させてるようです。
ファイルの共有なんかもdockerの知識さえあれば簡単に行えてとても便利そうです。

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で完結してしまうのはとても便利です。

参考

chrome 起動オプション
【Python】Seleniumでiframeの内容を操作する
Chrome DevToolsを使いこなそう! Web開発に必須なブラウザ開発ツールによるデバッグの基本

9
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ryuichi1208
社会人5年目の電話も来客対応もできない系エンジニア。
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
9
Help us understand the problem. What is going on with this article?