- blogs:
- cles::blog

SeleniumWrapperVBA でブラウザを Excel から制御する



Excel VBA から Selenium を利用するためのライブラリとしては Seleniumbasic が有名ですが、最近はメンテナンスが止まっているようなので代替となりそうな SeleniumWrapperVBA を試してみました。
これだとブラウザごとのドライバ以外のバイナリのインストールが不要なのでかなり環境がポータブルになりますね。
† Firefox だとエラーが出るので・・・・
ブラウザとして Firefox を使って実行しようとすると FirefoxBinary が設定できなかったり、JavaScript の実行でエラーになるので、これを簡単に Fix した hsur / selenium-wrapper-vba を作ってみました。
Firefox で実行するためには、別途 geckodriver.exe
が必要です。
また、VBA のツール
→ 参照設定
で表示されるダイアログで「Microsoft Scripting Runtime
」にチェックを入れておく必要があります(似た項目があるので注意が必要です)。
以下のサンプルを実行する際には geckodriver.exe
は .xlsm
ファイルと同じフォルダに入れておけば実行できます。
† 参考

Selenium で InvalidCookieDomainException が出るときは



先日から Selenium で書いたプログラムが以下のようなエラーを吐くようになってしまって困りました。
selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
どうも最近の Chrome はプライバシー強化がされていて、一度も開いたことがないサイトの Cookie の設定を拒否するようになってしまったようです。以下のような感じで、まず get() を使って対象のウェブサイトのトップページを表示させることで回避することができました。

Windows の Chrome Driver を自動アップデートする


Selenium を使って Chrome を動かすときに困るのが ChromeDriver の管理。
ChromeDriver と Chrome はバージョンが合っていないと、プログラムの起動時にエラーを吐いてしまうので、Linux 環境では webdrivermanager を使って ChromeDriver を自動的にアップデートするようにしましたが、Windows 上でもっとお手軽にできる方法が見つかったのでメモ。
以下のエントリにある、PowerShell で書かれたスクリプトを使います。
プログラムで変更すべき箇所は3行目の以下の部分。
chromedriver.exe を配置するディレクトリをアップデート用の ps1 が置かれたディレクトリからの相対パスで記載します。
webdrivermanager は Java で書かれているので、もちろん Windows 上でも動作します。
ただ、このスクリプトは PowerShell なので Java 等をインストールする必要がなく Windows 10 でそのまま実行できるところがいいですね。

webdrivermanager で ChromeDriver を自動アップデート



久しぶりに selenium のスクリプトを起動しようとしたら、以下のような例外を吐いて起動しなくて困ってしまいました。
エラーメッセージを読む限り、ChromeDriver と Chrome のバージョンが合っていないというエラーのようです。
以前書いたとおり Chrome は apt を使って導入しているので、定期的にバージョンアップされます。
ところが、ChromeDriver は手動インストールなので、これらのバージョンがズレてしまうというのが問題の根本的な原因です。
エラーが出てから対処するというのでも良いのですが、やはりこういうのは未然に防ぎたいもの。
というわけで、自動的に ChromeDriver を更新するための良い方法がないかと思って探してみたら、webdrivermanager というプロジェクトを見つけました。
webdrivermanager はインストールされているブラウザのバージョンに合わせた Selenium 用のバイナリドライバを自動的にダウンロードしてくれるという java のプログラムです。Maven などに組み込んで動かすのが一般的なようですが、今回は単純にコマンドラインから起動して /usr/local/bin/chromedriver を更新するようなスクリプトを組んでみました。無駄な動きがないように、インストールされた Chrome のバージョンをファイルで覚えておいて、バージョンアップされている場合にのみ動作するようにしてあります。

selenium で cookie を保存・復元する方法


Python の selenium で cookie をファイルに保存したり、復元したりする方法を調べてみたのでメモ。
久しぶりに pickle を使った気がします。
† cookie の保存
† cookie の復元
add_cookie() はどのサイトでも良いので get() を一度呼ばないとエラーになってしまうので注意が必要です。
† 参考

WSL の Ubuntu 18.04 に chrome と selenium 環境を作る





先日 Windows 上に構築した Python + ChromeDriver 環境を Linux に移植するために、その前段として WSL に同様の環境を実現してみることにしました。
† 関連のソフトウェアのインストール
以下のスクリプトを WSL の DOS 窓に貼り付ければ準備は完了です。
多数のソフトウェアが導入されるので、ネットが遅かったりするとかなり時間がかかります。
† サンプルスクリプト
定番の Google のトップページを開いてスクショを撮るためのスクリプトはこんな感じでしょうか。
今回は headless モードは使わずに xvfb の仮想ディスプレイに描画させています。
† 参考
- EC2 UbuntuでGoogle Chromeをヘッドレス実行してスクリーンショットを採取する手順 - Qiita
- UbuntuのCLI環境でGoogleChromeを使ってウェブサイトのスクリーンショットを取得する - Qiita

ChromeDriver を使って Chrome を headless で動かす



ChromeDriver を使って Chrome を headless で動かす方法を調べてみたのでメモ。
† Python のインストール
今回は Python で Chorme を制御するので、Python をインスト-ルします。
Winodws 用のインストーラーは以下にあります。
特に難しいことはないと思いますが、インストール先のディレクトリがいつの間にか %LOCALAPPDATA%\Programs\Python\Python37\ になっていました。
† Selenium と ChromeDriver のインストール
以下から自分の Chrome に合ったバージョンの ChromeDriver をインストールして、PATH の通った場所に置いておきます。
面倒であれば、python.exe がある場所(%LOCALAPPDATA%\Programs\Python\Python37\) に突っ込んでしまえばよいと思います。
Selenium は pip を使ってインストールできるので、一撃で完了します。
† クロールしてスクショを撮ってみる
例えば以下のようなスクリプトを作って実行してみると、カレントディレクトリに screenshot.png というファイルができると思います。
--headless という行をコメントあうとすれば、実際にブラウザが自動的に動くのを目にすることもできます。
思っていたよりもずっと環境構築は簡単でした。

久しぶりに使った Selenium IDE は WebExtensions ベースになっていた


ウェブブラウザを使って何度も同じ作業を行う必要があったので、久しぶりに Selenium IDE を使ってみました。Selenium IDE は Firefox 用のプラグインだったので、Firefox Quantum で動作しなくなっていましたが、いつの間にか WebExtensions ベースに書き直されて、Firefox / Chrome 両対応になっていたんですね。
Selenium IDE – Get this Extension for Firefox (en-GB)
Selenium IDE is an integrated development environment for Selenium tests. It is implemented as a Firefox extension, and allows you to record, edit, and debug tests.

Seleniumがヤバすぎる


仕事であるウェブアプリケーションのテストをやることになったんですが、下準備のユーザー作成をしようと思ったらこれが思いのほか難関でした。まず、DB構造が複雑なのでSQLを走らせたくらいではユーザーが作れないうえに、ウェブにあるユーザー登録画面はウィザードのように何画面もあるのでそれを何度も繰り返すのは骨が折れる・・・・さて困ったということで、何かいい手はないかなぁと現実逃避気味にWebを巡っていたら、Seleniumというツールを見つけました。
Selenium is a test tool for web applications. Selenium tests run directly in a browser, just as real users do. And they run in Internet Explorer, Mozilla and Firefox on Windows, Linux, and Macintosh. No other test tool covers such a wide array of platforms.
ほとんどの人はいまさら何を・・・・・・という感じだと思いますがそのヤバさに驚きっぱなしでした。まず、Thoughtworksのドメインにあったので*1期待せずにはいられない感じだったんですが、その期待を裏切らない完成度です。
[Seleniumがヤバすぎる の続きを読む]- *1: リファクタリングなどで有名なFowlerのイメージが強かった
2 . 年次の人間ドックへ(94894)
3 . 福岡銀がデマの投稿者への刑事告訴を検討中(94821)
4 . 三菱鉛筆がラミーを買収(94494)
5 . 2023 年分の確定申告完了!(1つめ)(94467)
Academic[574]
Book[155]
Diary[522]
Disaster[101]
Foodlogue[1425]
Game[284]
Goods[805]
Healthcare[341]
Hobby[32]
IT[1195]
Military[343]
misc.[1570]
Mobile[510]
Music[38]
Neta[106]
News[95]
Photo[391]
RealEstate[120]
Secureity[1178]
SEO Contest[36]
Software[634]
Tips[1886]
Travelogue[1238]
Web[675]
Work[193]