何か記事を作成してみようと思ったのと、色々つまづいたので備忘録も兼ねて書いておく。
やりたいこと
社内のProxy環境で、Winows10のWSL2を使いUbuntu上でSeleniumを動かす。SeleniumはPythonで動かす想定。
0. 環境
OS: Windows10 Enterprise (Windows機) / Ubuntu-20.04 LTS (WSL)
言語: Python 3.8.10
1. WSL2を使えるようにする
WSLの設定方法は別の記事に: https://qiita.com/tennis_lover/items/66ebdaebee645b6b2c01
Pythonのインストール
WSLのインストールが完了したら、PythonのインストールをUbuntu上で行う。以下の記事にまとめているのでどうぞ。
他にはこの記事が参考になる。
2. Seleniumのインストール
Ubuntu上で行う。
Seleniumはローカルマシン上で動かすか、Docker上で動かすかに大きく分かれるが、
最終的にCIでの自動テストで使いたいので、Docker上で動かす方法をとる。
私が慣れているのがPythonなので、以下はPythonでSeleniumを動作させるための方法。
以下コマンドでSeleniumをインストールする。
pip install selenium
環境設定が完了したら、PythonでSeleniumのコードを書いていくことになる。
Dockerの設定
Windows上で行う(Ubuntu上にDockerを直接インストールしても良いと思うが未確認)。
Docker Desktop for Windowsを使う。Dockerのインストール方法はたくさん出てくるので割愛。
WindowsにDocker Desktopをインストール後したらProxy設定を行う。
3. Proxy設定
以下、Ubuntu上での作業。
コンテナ起動時にオプションで設定しても良いが面倒なので、設定ファイル内に記述する。
/home/{USER}/.docker/config.json
に以下内容を適当なエディタで追記する。
"proxies": {
"default": {
"httpProxy": "http://{PROXY_HOST}",
"httpsProxy": "https://{PROXY_HOST}",
"noProxy": "{HOST_NAME}"
}
}
4. 動作確認
以下、WSL上での作業。
https://github.com/SeleniumHQ/docker-selenium に書いてある通り以下コマンドでコンテナを起動する(ブラウザはChrome)。
docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" selenium/standalone-chrome:4.0.0-rc-1-prerelease-20210823
以下は今回作成したサンプルプログラム。Google検索の画面にアクセスして、「Selenium」と検索する。
http://localhost:7900/にアクセスするとDocker上で実行される様子を確認できる。パスワードは上記のGithub内に書いてある。
from selenium import webdriver
from selenium.webdriver.common.by import By
# Capability の設定
capabilities = webdriver.DesiredCapabilities.CHROME.copy()
# Options の設定(ブラウザ設定)
options = webdriver.ChromeOptions()
# Selenium Server に接続する
driver = webdriver.Remote(command_executor='http://localhost:4444/wd/hub',
desired_capabilities=capabilities,
options=options)
# ウィンドウを最大化する
driver.maximize_window()
# Google 検索のページへアクセス
driver.get('https://www.google.co.jp')
# 検索テキストボックスの要素を検索する
element = driver.find_element(By.CLASS_NAME, 'gLFyf.gsfi')
# テキストボックスに「Selenium」と入力する
element.send_keys('Selenium')
# 「Google 検索」ボタンをクリックする
# 直接クリックを実行することもできる
driver.find_element(By.CLASS_NAME, 'gNO89b').click()
# ブラウザを閉じる
driver.close()
テキストボックスなどの要素のClassNameやIDなどはブラウザの開発者ツールで確認できる。
ちなみに
Windows上の、\\wsl$
がUbuntuのファイルシステムにマウントされているので、エクスプローラのアドレスバーに入力すればWindowsからでもアクセスできる。
以上です。