前回id要素がなくても、for eachで要素をチェックしてクリックする動作をお伝えしました。
上記で約半数のWebページは対応ができます。
では、対応が出来ない残りの半数は何でしょうか?JavaScriptを動作しているWebページです。
onclickは単純なクリックでは動かない
onclickはJavaScriptのイベントの一つです。「クリック」することでJavaScriptのイベントを発生させます。
その為、前回、前々回のような単純にClickだけでは、
クリック処理は出来ても、JavaScriptが発火しない(イベントが発生しない)ため、ページ遷移ができません。
HTML(Javascript)のサンプル
下記のサンプルをみて、
onclickをどのように処理をすればよいのか、理解してください。
id要素が存在する場合
id要素のクリックでOKです。Javascriptは意識しなくてよいです。
<a id="addressLinkA" href="javascript:void(0);" style="color: rgb(0, 0, 255);> 参照 </a>
onclick要素が存在する場合
下記VBAコードサンプルのように、JavaScriptを動かします。
//HTMLサンプル <a href="javascript:void(0)" onclick="submit(0, '/Info', { 'ID': '1', 'Address': '東京都中央区' }); return false;"> 詳細 </a>
'■「onclick="」と「; return false」の間の文字を使用する。 temp = "submit(0, '/Info', { 'ID': '1', 'Address': '東京都中央区' });" '■Javascript:の文言を足し、ページ遷移(Navigate)する objIE.Navigate "JavaScript:" & temp
注意点
- Googleで検索するとonclickについて紹介しているページで情報が古いものがあります。
それは「objIE.Document.Script.setTimeout」で処理をするというものです。 - 以下エラーが表示されるケースがあり、現状は使わない方が望ましいでしょう。
「実行時エラー ‘-2147024891 (80070005)’:アクセスが拒否されました。」 - 「Javascriptのonclick要素を抜き出す」処理が面倒なので、パーツ化しています。参考にどうぞ。
関連記事
その他
Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。
Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。
コメント