Python Seleniumを駆使したTwilog手動更新ボタン押下の自動化

公開

Twilog がAPI枠を使い果たしたことにより自動更新を停止。翌月からの有料プラン対応を前に、しばらく 手動更新 が必要になったので、 Python の Selenium を使ってChromeやFirefoxでボタン押下操作の 自動化 を実現します。

Twilogの手動更新ボタンとは

ブラウザで自身のTwilogページを開いたら、開発ツールでページ右にある 最新の情報に更新する ボタンの要素を特定、その要素のXPATHを取得します。

図1.Firefoxの開発ツールで要素を特定

図1.Firefoxの開発ツールで要素を特定

手動更新ボタン付近のタグを抜粋すると、

となっていることから、 //div[@id='side-update'] の下層にある、 .//form/input[@type='submit'] を押下すれば良いことがわかります。

 

Ubuntu 18.04デスクトップのChromeで試行

お試しの実行環境は、仕事場で普段使いのUbuntu 18.04デスクトップ。Chromeブラウザもインストール済みです。

ブラウザ操作をプログラミングできる、Selenium WebdriverのPython版パッケージpip より導入します。

Selenium 4.20.0がインストールされました。

上述のSelenium Pythonプロジェクトページに載っているサンプルを参考に、ターミナルからChromeブラウザを操作してみます。

この時、デスクトップ上にChromeブラウザのウィンドウが現れ、Pythonから手動更新ボタンを押すことができました。

図2.Seleniumで制御されたChrome

図2.Seleniumで制御されたChrome

次に、ブラウザウィンドウを開くこと無く操作可能な、ヘッドレスモードを試してみます。

エラー以外は何も戻り値はないので、プロンプトが返ってくれば成功です。

 

Ubuntu 22.04デスクトップのFirefoxで試行

続いてシステム構成が少し異なる、Ubuntu 22.04デスクトップのFirefoxで試してみます。

同様に pip でSeleniumパッケージのインストールを済ませたら、Firefoxのヘッドレスモードを試してみます。

ここまでの試行は拍子抜けするぐらい順調でしたが、問題はここから。

 

Ubuntu 20.04 AArch64で苦戦

ここまではいずれもテスト環境のデスクトップ機でしたが、最終的には終日安定稼働しているOracle Cloud上の仮想マシン上での、ヘッドレス運用を考えています。Firefoxをインストールし、 pip からSeleniumパッケージ導入を済ませました。

ターミナル上でPythonスクリプトを一行ずつ実行してみると、ドライバをロードするところで、AArch64アーキテクチャはサポート外とのエラーが。ちなみにこのインスタンスは、Oracle Crould VM.Standard.A1.Flexシェイプを使用しています。

そこで、各ブラウザ向けwebdriverのインストール・更新に便利なwebdriver-managerパッケージを導入。

上述のプロジェクトページに記載されているサンプルスクリプトを参考に、一行ずつ進めてみると、ドライバのロードでアーキテクチャを間違えてしまい、linux64版のドライバがインストールされてしまったことによるエラーに。

そこで、geckodriverは自分でダウンロードすることが可能なので、webdriver-managerのフォルダ構成に習い、linux-aarch64版を手作業で配置してみることに。

更にwebdriver-managerの os_type 指定を試してみるも、思惑通りに振り向いてはくれません。

 

万策尽きたところでwebdriver-managerによるお膳立てを諦め、Seleniumをドライバパス指定で動かすことでようやく成功。最終的に、以下のスクリプトに落ち着きました。

ようやく機能するようになったPythonスクリプトファイルをcronへ登録し、ヘッドレスモードで毎日1回、手動更新ボタンを押してもらいます。

最後に、今後Firefoxが更新されないように、 apt-mark でホールドしておきました。

 

本記事をまとめている間に月が変わり、Twilogの有料プランがサービスイン。

Python Seleniumで手動更新を自動化できてしまいましたが、お世話になっているサービスへの支援を込めて、有料プランを申し込もうと思います。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA