この記事は「Python Advent Calendar 2021」の記事です。
背景
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みたいな感じでさくっと使えるかなと思って調べたら存在しました。
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開発に必須なブラウザ開発ツールによるデバッグの基本