人生、徒然なるままに。

Webエンジニアのぼやきです。IT系の話題をメインに。

Selenium WebDriverで始めるブラウザ自動操作入門

自動でブラウザを操作するためには、何を知り何をすればいいのか、その方法を以下。

 Selenium WebDriverとは

プログラム言語(Java/C#/Ruby/Python/Javascript)からブラウザを操作するためのフレームワークのことです。(厳密には定義が違うかもしれませんが。)

 

操作できるブラウザは?

Chrome, FireFox, IEなど、有名どころはもちろん、そのほかのブラウザも色々と操作できます。

原理としては、Selenium WebDriverから直接ブラウザを操作するのではなく、IEを操作したいのならIE用のドライバを、FireFoxを操作したいのならFireFox用のドライバにプログラム言語から命令を投げ、間接的にブラウザを操作する形となるので、

ブラウザに依存しない操作用のスクリプトを作成可能です。

 

つまり・・・

Selenium WebDriver → 各ブラウザ用ドライバ → ブラウザ

といった操作の委譲がなされるわけですね。

 

実際にC#で操作してみる

Visual Studioでの導入はすごく楽なので、C#選んでみました。

何も知らない人用にプロジェクトの作成から。

 

ファイル→新規作成→プロジェクトをクリック

f:id:shoutatani:20160710195200p:plain

 

今回は、簡易的なアプリケーションにするために、コンソールアプリケーションを選択。

ソリューションを作成する場所、プロジェクト名を決めて、"ソリューションのディレクトリを作成"にチェックを入れてください。

f:id:shoutatani:20160710195231p:plain

 

ソリューション、プロジェクトの作成が完了しました。

f:id:shoutatani:20160710195239p:plain

 

さて、まずはブラウザの操作に必須の、Selenium WebDriverをnuget経由でインストールしましょう。

上部ナビゲーションから、表示→その他のウィンドウ→パッケージマネージャーコンソールを選択。

f:id:shoutatani:20160710195253p:plain

 

下にパッケージマネージャーコンソールが現れたので、以下の通り入力し、エンターを押してください。

Install-Package Selenium.WebDriver

f:id:shoutatani:20160710195304p:plain

 

これで無事Selenium WebDriverの導入が完了しました。プロジェクトの参照に、WebDriverがあることが確認できます。

コンソールにも正常にインストールされましたの文字が確認できますね。

f:id:shoutatani:20160710195317p:plain

 

さてさて、今回はIEを操作してみたいと思います。

Seleniumのサイトから、IE用ドライバをダウンロードします。64bitのIEを操作したいなら、64bit版をダウンロードしてください。

f:id:shoutatani:20160710195329p:plain

 

さて、実際にドライバをプログラムから使うためには、ドライバの存在するディレクトリのフルパスを与えてやる必要があります。

適当な場所において、その場所の絶対パスを与えてやってもいいんですが、今回は常に操作するプログラムがある場所ならどこでも操作できるようにしておきます。

そこで、ダウンロードしたIE用ドライバ( .exe ) をプロジェクトに追加するので、プロジェクト上で右クリック→追加→既存の項目を選択します。

f:id:shoutatani:20160710195341p:plain

 

プログラムの種類を全てのファイルにして、IE用ドライバを選択して追加をクリック。

f:id:shoutatani:20160710195353p:plain

 

これでIE用ドライバをプロジェクトに認識させることができましたが、このexeを常に実行用ディレクトリに置くために、IE用ドライバ上で右クリック→プロパティを選択。

f:id:shoutatani:20160710195404p:plain

 

プロパティウィンドウの"出力ディレクトリにコピー"を、"常にコピーする"に設定します。

これで、ビルド先のexeと同ディレクトリにIE用ドライバのexeも配置されることになります。

f:id:shoutatani:20160710195416p:plain

 

準備完了、あとはプログラムを書いていくだけ。

まずは、以下の通りIWebDriver型の変数を宣言し、IE用ドライバのインスタンスを与えてやります。この際、コンストラクタにIE用ドライバがあるディレクトリのパスを与えてやることで動くようになります。

今回は、実行用ディレクトリにIE用ドライバがあることとしているので、カレントディレクトリのパスを与えています。

 

さて、なぜIWebDriver型の変数を宣言しているかというと、インターフェースの型なので、これにクロームのドライバを与えてやれば型宣言を書き換えずにクロームの操作もできるように、といった感じです。

 

ブラウザの操作は、すべてこのIWebDriver型の変数を用いて行います。

次に、google.comに遷移させてみましょう。Navigate().GoToUrlメソッドに、遷移先URLを与えてやります。実行してください。

f:id:shoutatani:20160710195431p:plain

 

Windows Firewallを起動している場合、権限をきいてきますのでアクセスを許可させてください。

f:id:shoutatani:20160710195445p:plain

 

あれ失敗・・・どうやら、保護モードをすべてのゾーンで外すように、とのことです。

f:id:shoutatani:20160710195514p:plain

 

IEを開き、インターネットオプションから、セキュリティタブの保護モードを有効にする、のチェックを外してください。

f:id:shoutatani:20160710195525p:plain

 

さて、これで実行すれば以下の画面が立ち上がるはずです。めでたい。

f:id:shoutatani:20160710195534p:plain

 

では、実際に検索テキストボックスに値を入力させてみましょう。

F12キーを押し、開発者モードを起動してください。DOMExplorerから、左端のアイコンをクリックした後、テキストボックスをクリック。

そうすると、テキストボックスのidが分かるので、これをコピー。

f:id:shoutatani:20160710195543p:plain

 

先ほど取得したid値の要素(Selenium上では、element)を取得するために、

IWebElement型の変数に、ドライバー.FindElement(By.Id("id値"))とした要素を代入。

ここでも、IWebElement型の変数を用いて、様々なwebの要素を一括して操作できるようにしています。

その後、ドライバー.Clear()としてテキストボックスをいったんクリアして、

SendKeys("入力値")でキーボードからの値入力をシミュレートします。

f:id:shoutatani:20160710195554p:plain

 

そうすると・・・無事テキストボックスに値が入力できましたので、

次に横の検索ボタンを押させてみます。

f:id:shoutatani:20160710195622p:plain

 

ボタンには、nameしかなかったので、By.Name("name値")として、elementを取得して、

そのelement.Click()で、クリックをシミュレートします。

f:id:shoutatani:20160710195639p:plain

 

これで無事検索ができました。

f:id:shoutatani:20160710195650p:plain

 

IEとかのドライバを終了させるためには、Quit()を呼び出す必要があるので、finallyで処理させればよいです。

f:id:shoutatani:20160710195703p:plain

 

さて、単純でしたがいかがでしたでしょうか。

簡単ですよね?

以前、外貨レート取得の操作もしてみたので、よかったらそちらも参考にしてください。

 

shoutatani.hatenablog.com

 

 

shoutatani.hatenablog.com

 

Visual Studioでのブラウザ操作は本当に楽です。導入が簡単で。

もちろんVB.netからもできるのでVB.netプログラマの方もご安心を。

 

以上、ご査収ください。