ブログを検索

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

2021/12/11

SDRplay社 RSP1A SDR受信機の APRS IGateテスト準備

 昨年、IGate用のUSBチューナードングル RTL-SDR.COM V3 を買った時にもう少しだけ良さそうな受信機が欲しいと思い、SDRplayの RSP1Aを購入しました。

パチモンが出回っているようなので正規代理店のアイキャスエンタープライズから購入しました。

この RSP1Aは、たまーに 40mを受信してスペクトラム・アナライザーを眺めていただけでしたが、RTL-SDR.COM V3 のおもちゃっぷりを発見してからふと、RSP1A で APRSのビーコンをデコードしたらもっとデコード率が上がるのか実験してみたくなりました。

比較のため1本のアンテナから分配して受信したいのですが、すでに 2つの RTL-SDR.COM V3 が運用中なので仕方なく別のアンテナを使うことにします。まだ設置していませんが運用中と同じ型番 DP-NR22L を使います。

受信だけなのでアンテナは既存となるべく近い位置に設置して可能な限り条件を近づけます 

ということでハードは
アンテナ → ケーブル → M/SMP変換 → RSP1A → USBケーブル → ラズパイ → 有線LAN → ルータ → Tier2サーバ
という構成にします。

ソフトウェアは、デコード率に差が出ないよう運用中と同じ rtl_fm と direwolf 1.6 を使おうと思いましたが調べてみると RSP1A は rtl_fm では接続できないようです
こういう使い方の場合、日本語の情報は皆無のようで海外の情報を探したところ、rtl_fm をベースに SoapySDR接続なるものに対応した rx_fm というソフトで接続できそうな雰囲気です。出展はここ
rx_fm で受信して direwolf 1.6 でデコードします
ここまで調べるのに 3日ほど掛かり仕事が遅延して大変困っております 

さて、これ以降は休日を使って少しずつ構築し、144.68MHz で実験予定です

実は今回の受信システム構築の最大の山場はアンテナ設置です。高所恐怖症なので想像するだけでビビッております

2021/12/06

IGate JL7TUS-10 で驚愕の事実が判明

ホントに驚きました!
本日もクルマから 144.64MHz 9600bpsで無駄な電波を出しつつ近所のホムセンに行った時の話なんですが・・・

IGateの JL7TUS-10 は受信しか出来ませんが 144.64MHz/9600bps と 144.66MHz/1200bps の両方に対応しています。
1本のアンテナを分配器で分けてそれぞれに USBチューナードングル(RTL-SDR.COM V3 アマゾン送料無料 税込3,970円)を付けて 2つの周波数を同時受信するようにしています

ホムセンへの途中、自宅から300mほど離れたコンビニで飲み物を買ったタイミングで IGateの動作確認のため無線機の APRS通信速度を 9600bps →1200bps に変えてみました。
そして手動でビーコン発射
無事に IGate はビーコンを受信して aprs.fi の地図上に私の車のアイコンがプロットされて安心しました
・・・・・いや・・・いやいや・・・まてよ・・・・・通信速度だけ 9600bps → 1200bps に変えて周波数は 144.64MHz のままだよ・・・
なぜ受信するんだ 大汗

144.62MHz では受信しない。これは正常
周波数を 144.66MHz に変えてやると受信する、これも正常
周波数を 144.68MHz にしたら受信する・・・ 脂汗が出てくる・・・

144.66MHz/1200bps を受信しているつもりで 144.64 ~ 144.68MHz を受信してデコードしていました!
なんというおもちゃっぷり笑! RTL-SDR.COM V3 アマゾン送料無料 税込3,970円

その後、車で移動しながら試していると
144.64/1200bps は半径 2Kmくらいのカバーエリア
144.68/1200bps も半径 2Kmくらいのカバーエリア
144.66/1200bps はもっと広い(方角にもよりますがだいたい半径20~30Kmくらい)
ということが判りました。
実験で使った車の送信機は出力5W、アンテナ利得カタログスペック2.15db で給電点は車の屋根から5センチくらい上です

アマチュア無線を始めてちょうど1年。最初は半径5Kmくらいのカバーエリアだった JL7TUS-10 を自分なりに改良しながら育ててなんとかそれなりのカバーエリアになったと思っていましたがこんな状態だったとは驚きました!

JL7TUS-10 の近くを通ることがあれば、周波数を多少間違えていてもデコードしてしまうおもちゃ IGate を体験してみてください 笑
あまりに驚いてホムセン行くの忘れました

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

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