【EXCEL VBA】WEBブラウザを自動操作する!Selenium Basicの使い方!その2(Chrome編)

スポンサーリンク

はじめに

SeleniumBasicって何?って言う方はこちら

SeleniumBasicって何?って言う方は、まずはこちらの記事をどうぞ。

始め方を説明しています!

SeleniumBasicの始め方

そして基本的な使い方をまとめた記事はこちら!

スポンサーリンク

SeleniiumBasicの使い方(その2)

上の記事のように、前回SeleniumBasicの初めかたと、簡単なWEBブラウザの操作(検索ボックスで検索する)方法を紹介しました!

この記事では、更に更に踏み込んで、自分のメモ書きも兼ねて色々な機能を紹介したいと思います!

要素があるかどうか確認する

Dim myBy As New By
Driver.IsElementPresent(myBy.Css("セレクター"))

指定の要素があるかどうかの確認が出来ます。あるときはTrue、無いときはFalseが返ります。

ByクラスはSeleniumに搭載されたクラスでByのインスタンスを生成してその中のメソッドでタグやキーワードを指定する。

例では、Cssを指定するメソッドを使っているが、他にもある。

  • .Xpath
  • .id
  • .Css
  • .Tag
  • .linktext
  • .partiiallinktext
  • .Any
  • .name
  • .Class

これを使って、指定の要素があるかどうかで処理を分けれますね(^o^)

また、読み込みの確認をするのにも役立ちます!

Dim flag As Boolean
Do
    flag = Driver.IsElementPresent(myBy.Css("セレクター"))
Loop Until flag

みたいな感じにすることで、その要素が見つかってかた次の処理に進むということが出来ます。

Waitと組み合わせて安定稼働につなげましょう!

出てこない要素で指定しちゃうと、一生進まなくなるので注意して下さいw

“myBy”の後の「.Css」のところを、「.Tag」とか「.Id」とかに変えれば色々出来ます!

要素を画面内に表示する

Seleniumでブラウザを操作していると必ずぶち当たりますが、Seleniumでチャックボックスとかボタンをクリックしたいとき、HTML上にあるけどブラウザの中にボタンが現れてないとエラー吐いちゃうんですよね(><)

適当にスクロールしたりするんですが、それも結構面倒だったり、モーダルになってたりすると、背景だけスクロールされちゃったりしちゃいます。

色々調べた結果、Seleniumの「driver.ExcuteScript」で、JavaScriptの「Element.scrollIntoView()」を使うのが一番ラクで安定するなって思っています(^o^)

driver.ExecuteScript "Element.scrollIntoView()"

”Element”の部分は、JavaScriptの「document.getElementById(‘id’) )とかで取得してくださいね(^o^)

driver.ExecuteScript "document.getElementById('id').scrollIntoView()"

みたいな感じです。

JavaScriptなんて分かんね~よ!って方は、Seleniumで取得したエレメントを使う書き方の以下をどうぞ(^o^)

Dim el as Selenium.WebElement
set el = driver.FindElemmentById('id')
driver.ExecuteScript "arguments[0].scrollIntoView();", el

こっちの方が使いやすいですね!

最近は、突然画面外の要素押せなくなったりするので、僕はラジオボタン処理・チェックボックス処理・クリック処理のサブルーチンを作成して、とりあえず画面内に持ってきてから要素にアクションするうようにしています!

モーダルウィンドウ上の要素も、サクッとブラウザ内に持ってくることが出来ますよ(^o^)

追記

よくよく見たら、WebElementクラスの中にScrollIntoViewメソッドが、、、

Dim el as Selenium.WebElement
set el = driver.FindElemmentById('id')
el.ScrollIntoView True

でいけるっぽいですね。

引数に指定している「True」は、デフォルトが「False」になってますが、デフォルトままだと要素のTOPが画面内に入ってるところで止まってしまって、ボタン押せないときがあるので、「True」を設定しておいた方が良いです(^o^)

JavaScriptどうのこうのっていちびった自分、恥ず。。。

スポンサーリンク

その他 Seleniumに関する記事

コメント

タイトルとURLをコピーしました