ブログを検索

2021/12/25

seleniumのブラウザを chrome から chromium へ変更

 Windows10 64bit php7.3 + chromedriver + phpwebdriver2.53.1 + chromeブラウザで24時間あっちこっちのページを自動で渡り歩いているプログラムがあるのですが、今朝 chromeが自動でバージョンアップし 96.0.4664.110 になって動かなくなりました。

これは時々あることでいつものように chromedriver のバージョンを合わせたら動くだろうとやったら大変なことになって chromium に切り替えて復旧したという誰にも参考にならないだろう情報をメモしておきます。

(php + chromedriver + phpwebdriver + chromeブラウザ という構成のシステムを使っている人はいるのだろうか?)

まず chromedriver ダウンロードしてみた

(結果的にこれは失敗に終わった)

・If you are using Chrome version 96, please download ChromeDriver 96.0.4664.45

とあるので chromedriver 96.0.4664.45 をダウンロードして入替えたところ、ヘッドレスだと chromeのプロファイルが参照できないのか各種ページにログインしていた状態を復元できなくなった。

ヘッドレスをやめてブラウザ画面を起動するようにするとログインした状態が復元するが、ただでさえ不安定な seleniumによるウエブブラウザ自動運転が一層不安定になるし動作も遅くなってしまう。

ひとしきりあれこれ試して解決出来ず自動でバージョンアップしない chromium(のバージョン95) に切り替えるべくダウンロードしました。

ダウンロードページで 920069 を選択して chrome-win.zip と chromedriver_win32.zip をダウンロードしました。

沢山あるけど 920069 がバージョン 95.0.4638.0 と大体良さそう

どちらのファイルもインストーラは無いので zipを解凍して良さそうな場所にフォルダ毎配置してから手動で chromiumブラウザを起動して(実行ファイル名は chrome.exe) googleやら Yahooにログインした状態にしてプロファイルをいい感じに仕上げました。

seleniumをドライブする phpプログラムのブラウザ起動部分を下記に抜粋。
当然、各種パスは各自の環境に合わせて指定する必要があります。
chromiumに切り替えるために変更したのは 「これを追加 1/2」 と 「これを追加 2/2」が指す 2行だけ


<?php
    require_once './vendor/autoload.php';
    use Facebook\WebDriver;
    use Facebook\WebDriver\WebDriverExpectedCondition;
    use Facebook\WebDriver\WebDriverBy;
    use Facebook\WebDriver\Chrome\ChromeOptions;
    use Facebook\WebDriver\Chrome\ChromeDriver;
    use Facebook\WebDriver\Remote;
    use Facebook\WebDriver\Remote\RemoteWebDriver;
    use Facebook\WebDriver\Remote\DesiredCapabilities;
    use Facebook\WebDriver\WebDriverKeys;
    use Facebook\WebDriver\WebDriverSelect;
    putenv('webdriver.chrome.driver=./chromedriver.exe');
    $options = new ChromeOptions();
    $options->addArguments(['--headless']);        // ヘッドレス指定
    $options->addArguments(['--start-maximized']); // ウインドウ最大化
    $options->addArguments(['--ignore-certificate-errors']);
    $options->addArguments(['--ignore-ssl-errors']);
    // chromium実行ファイルのパス指定を追加 
    $options->setBinary("D:/xampp/chrome-win/chrome.exe");    // ←これを追加 1/2
    // chromiumプロファイルのパス指定を追加 
    //$profile = "--user-data-dir=D:/xampp/selenium/Default";
    $profile = "--user-data-dir=D:/xampp/Chromium/User_Data/Default"; // ←これを追加 2/2
    $options->addArguments([$profile]);
    $caps = DesiredCapabilities::chrome();
    $caps->setCapability(ChromeOptions::CAPABILITY, $options);
    $webdriver = RemoteWebDriver::create('localhost:4445/wd/hub'); // selenium webserver経由のブラウザ起動
    $webdriver->get('https://www.google.com/'); // googleへ画面遷移
    sleep(3);
    $webdriver->quit(); // webserver切断、ブラウザ終了


インストールせずに解凍しただけのデフォルトブラウザでもない chromium を起動する方法が分からず検索しまくりましたがここで $options->setBinary と指定できることが分かって無事動かすことが出来ました。

chromeが更にバージョンアップすれば問題は解決するのかもしれませんが待てないのでこんな後ろ向きな対応をした次第です。

0 件のコメント:

コメントを投稿

MySQL で SELECT into outfile 出来なくてハマった件

 Windows上の MySQL で SELECT into outfile で CSVファイルをエクスポートしようとしてハマったので残しておく 環境 Windows10 Pro バージョン 1809 MySQL 8.4.0 という環境で SELECT * FROM table1...