ConoHa WING上でChromiumのSeleniumを動かす

eyecatching_conoha-wing-chromium-selenium プログラミング
この記事は約12分で読めます。
 

前提

  • この記事で導入したPython 3.10.5を利用している
  • pip install seleniumでSeleniumのライブラリをいれておく

手順

Chromiumのインストール

ここから2022/06/28現在、最新のChromium安定版(103.0.5060.53)をインストールする。

バージョン103.0.5060.53のリビジョンは1002917なので、それを指定する。

${HOME}/local配下にインストールしてパスを通す。${HOME}/work_localはワークディレクトリ。

[cXXXXXXX@web0079 ~]$ chrome --headless --ignore-certificate-errors --screenshot https://www.electronjs.org/
[0628/155221.871536:WARNING:bluez_dbus_manager.cc(247)] Floss manager not present, cannot set Floss enable/disable.
[0628/155221.895545:WARNING:sandbox_linux.cc(376)] InitializeSandbox() called with multiple threads in process gpu-process.
[0628/155222.354005:ERROR:cert_verify_proc_builtin.cc(681)] CertVerifyProcBuiltin for www.electronjs.org failed:
----- Certificate i=2 (CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R3) -----
ERROR: No matching issuer found


[0628/155222.791799:ERROR:cert_verify_proc_builtin.cc(681)] CertVerifyProcBuiltin for cdn.jsdelivr.net failed:
----- Certificate i=1 (CN=Cloudflare Inc ECC CA-3,O=Cloudflare\, Inc.,C=US) -----
ERROR: No matching issuer found


[0628/155223.261291:ERROR:cert_verify_proc_builtin.cc(681)] CertVerifyProcBuiltin for www.google-analytics.com failed:
----- Certificate i=3 (CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE) -----
ERROR: No matching issuer found


[0628/155223.534821:INFO:headless_shell.cc(660)] Written to file screenshot.png.

色々エラーやワーニングが出るが、これでスクリーンショットが取得できる。

screenshot
コマンドで取得したスクリーンショット

ChromeDriverの準備

[cXXXXXXX@web0079 ~]$ chrome -version
Chromium 103.0.5060.0
[cXXXXXXX@web0079 ~]$ chromedriver -version
ChromeDriver 103.0.5060.0 (eb699480da35a486819da3e94c507b229ebb2bc1-refs/heads/main@{#1002917})

ChromiumとChromeDriverのバージョンが揃っていることを確認。

Selenium

    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

これでもたまにタイムアウトすることもあり。原因はよくわからない。。

screenshot_selenium
PythonのSeleniumで取得したスクリーンショット

上記が取得したスクリーンショット。

解説

options.add_argument("--ignore-certificate-errors")のオプションは廃止予定らしいので利用していない。

driver = webdriver.Chrome(executable_path="path")の書き方が非推奨になっているので、これを参考に修正した。

jumbotron-leadクラス属性は「Build cross-platform desktop apps with JavaScript, HTML, and CSS」。これが表示されるまで待ち、スクリーンショットを取得する。

ChromiumやChromeDriverをきちんと終了せず、プロセスが残っている状態で実行すると

    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /home/cXXXXXXX/local/chromium1002917/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

のようなエラーが出ることがある。このエラーを回避するために、with文でwebdriverを利用する。with文を利用することで異常終了時でもきちんと終了できる(コチラの記事)。

[cXXXXXXX@web0079 ]$ ps auxf | grep chrome
cXXXXXXX 204218  0.0  0.0   9092   676 pts/0    S+   06:09   0:00  \_ grep --color=auto chrome
cXXXXXXX 198581  0.3  0.0 33665172 7672 pts/0   Sl   06:09   0:00 /home/cXXXXXXX/local/chromium1002917/chromedriver --port=49676
cXXXXXXX 198628  3.0  0.0 34173836 58044 pts/0  Sl   06:09   0:01  \_ /home/cXXXXXXX/local/chromium1002917/chrome --allow-pre-commit-input --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-blink-features=ShadowDOMV0 --enable-logging --headless --ignore-certificate-errors --log-level=0 --no-first-run --no-service-autorun --password-store=basic --remote-debugging-port=0 --test-type=webdriver --use-mock-keychain --user-data-dir=/tmp/.org.chromium.Chromium.v48I8K data:,
cXXXXXXX 198631  0.0  0.0 33983304 36500 pts/0  S    06:09   0:00      \_ /home/cXXXXXXX/local/chromium1002917/chrome --type=zygote --no-zygote-sandbox --enable-logging --headless --log-level=0 --headless
cXXXXXXX 198654  0.4  0.0 34181196 31360 pts/0  Sl   06:09   0:00      |   \_ /home/cXXXXXXX/local/chromium1002917/chrome --type=gpu-process --enable-logging --headless --log-level=0 --ozone-platform=headless --use-angle=swiftshader-webgl --headless --gpu-preferences=WAAAAAAAAAAgAAAYAAAAAAAAAAAAAAAAAABgAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAA== --use-gl=angle --enable-logging --log-level=0 --shared-files --field-trial-handle=0,i,5716746440519918977,8361872478329361840,131072 --disable-features=PaintHolding
cXXXXXXX 198633  0.0  0.0 33983292 36528 pts/0  S    06:09   0:00      \_ /home/cXXXXXXX/local/chromium1002917/chrome --type=zygote --enable-logging --headless --log-level=0 --headless
cXXXXXXX 198639  0.0  0.0 33983324 11132 pts/0  S    06:09   0:00      |   \_ /home/cXXXXXXX/local/chromium1002917/chrome --type=zygote --enable-logging --headless --log-level=0 --headless
cXXXXXXX 198732 10.7  0.0 1179324472 134684 pts/0 Sl 06:09   0:04      |       \_ /home/cXXXXXXX/local/chromium1002917/chrome --type=renderer --headless --lang=en-US --enable-automation --enable-logging --log-level=0 --remote-debugging-port=0 --test-type=webdriver --allow-pre-commit-input --ozone-platform=headless --disable-gpu-compositing --enable-blink-features=ShadowDOMV0 --lang=en-US --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=5 --launch-time-ticks=26881907912063 --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,5716746440519918977,8361872478329361840,131072 --disable-features=PaintHolding
cXXXXXXX 198703  1.1  0.0 34061404 48392 pts/0  Sl   06:09   0:00      \_ /home/cXXXXXXX/local/chromium1002917/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --enable-logging --ignore-certificate-errors --log-level=0 --use-angle=swiftshader-webgl --use-gl=angle --ignore-certificate-errors --headless --enable-logging --log-level=0 --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,5716746440519918977,8361872478329361840,131072 --disable-features=PaintHolding
[cXXXXXXX@web0079 ]$ kill 198581 198628
[cXXXXXXX@web0079 ]$ ps auxf | grep chrome
cXXXXXXX 209942  0.0  0.0   9092   676 pts/0    S+   06:10   0:00  \_ grep --color=auto chrome

もし、unknown error: Chrome failed to start: crashed.のエラーが出たら、psコマンドで見てkillで消せば良い。階層の一番上のChromeDriverとChromiumのPIDを指定して消せばすべて消える。

その他

日本語ページは文字化け(豆腐化)する

screenshot_selenium_pythonjp
PythonのSeleniumで取得したスクリーンショット(日本語ページ)

sudo apt-get install -y fonts-ipaexfontが実施できれば解決すると思うが、sudoできないのでどうやるか。。今のところ、キャプチャの予定はないので、ペンディング。

タイトルとURLをコピーしました