「なんかリンクがクリックできないよ・・・」を解決します。
UWSCでIE操作を行う場合、「リンクのクリック」をしたいことはよくあります。
特にポイントサイトの場合、画面の遷移だけでなく、
クリックポイントや検索ポイントを取得する際にも必要ですしねー。(*^-^*)
でも、結構ありますよね。
「なんかリンクがクリックできないよ・・・(´・ω・`)」
ってことが。
リンクといっても、単純なaタグだけとは限らず、
様々な実装が行われています。
単純にクリックできないことも多々あるんです(;´・ω・)。
そんなときはこちらのパターンを参考にしてみてください。
(ソースのところをダブルクリックしてもらえればコピーできるようになります)
aタグの単純な単一リンクをクリックする場合はIELink
最もシンプルなパターンです。
普通のIEのリンクなら、これで十分です。
1 2 3 4 5 6 | IE=CreateOLEObj("InternetExplorer.Application") IE.Visible=True IE.Navigate("http://XXXXXXXXXXXXXXX/") BUSYWAIT(IE) IELink(IE,"リンクの表示名") |
複数のリンクを一括取得したいときはIE.Document.links
ページ内にある複数のリンクを条件に応じて抽出して、
まとめて処理したい場合などに使います。
例えば、ポイントサイトのあるページにある、
クリックポイントをまとめてクリックしちゃいたい時とか。
以下の例では、ページ内のリンクを全て取得した後、
「clickpoint.php」をアドレスに含むリンクを
全てクリック(.Click())するスクリプトになります。
1 2 3 4 5 6 7 8 9 10 11 | IE=CreateOLEObj("InternetExplorer.Application") IE.Visible=True IE.Navigate("http://XXXXXXXXXXXXXXX/") BUSYWAIT(IE) LINK_AMOUNT=IE.Document.links.length FORa=0TO(LINK_AMOUNT-1) IFBPOS("clickpoint.php",IE.Document.links[a].href)>0 IE.Document.links[a].Click() ENDIF NEXT |
画像リンクをクリックしたいときはIE.Document.Images
リンクに文字ではなく、画像が設定されているリンクもあります。
htmlタグとしては、以下のような感じです。
1 | <ahref="XXXXXXX"><imgsrc="YYYY.gif"alt="リンクの画像だよ"width="200"/></a> |
こういう場合は、IE.Document.Imagesで画像を探してあげて、
クリックしてする感じになります。
以下の例では画像を探した上で、
alt属性の値をキーに対象箇所を特定して、
画像自体をクリックしています。
1 2 3 4 5 6 7 8 9 10 11 | IE=CreateOLEObj("InternetExplorer.Application") IE.Visible=True IE.Navigate("http://XXXXXXXXXXXXXXX/") BUSYWAIT(IE) IMG_LST=IE.Document.Images FORI=0TOIMG_LST.length-1 IFBIMG_LST.Item(I).Alt="リンクの画像だよ"THEN IMG_LST.Item(I).Click() ENDIF NEXT |
特定できる属性が無い画像リンクをクリックしたいときはIESETDATA
上記ではalt属性がありましたが、画像のsrcのみの場合もあります。
このような場合。
1 | <ahref="XXXXXXX"><imgsrc="YYYY.gif"/></a> |
この場合は、IESETDATAのタグ指定(TAG=IMG)でクリックします。
「IESETDATA」はかなり万能です。
リンクだけでなく、ボタンやその他のコントロールなど、
いろいろなクリックを行うことができます。
注意すべき点は、画像のURLは絶対指定(http:~から)という点です。
相対指定されているケースが多いので、
サイトのURLを付けてやる必要があります。
1 2 3 4 5 6 | IE=CreateOLEObj("InternetExplorer.Application") IE.Visible=True IE.Navigate("http://XXXXXXXXXXXXXXX/") BUSYWAIT(IE) IESETDATA(IE,TRUE,"TAG=IMG","http://XXXXXXXXXXXXXXX/YYYY.gif") |
スクリプト等で画面移動している場合はIEGETSRC
一番やっかいなケースですね。
通常のリンクではなく、スクリプト等で画面制御しているケースです。
最近はjavascriptのリッチなUI/UXが盛んですので、
最近出来たサイトなどでは結構あります。
例えば、最近流行ってる「1円アンケート」などは、
UWSCで比較的簡単に自動化できるのですが、
URLアドレスが取得できずに困るケースがあります。
例えば、infoQでは、
アンケートへのリンクが以下のようになっていて、
スクリプトで処理されています。
1 | <aclass="c_pointer"onclick="openEnqWindow('https://infopanel.jp/lpark/enqRedirect.do?qid=XXXXXXXXX',YYYYYY);return false;">ZZZに関するアンケート(マンガ)</a> |
onclickの部分のスクリプトのパラメータ
「https://infopanel.jp/lpark/enqRedirect.do?qid=XXXXXXXXX」
の部分が1円アンケートのURLアドレスです。
このような場合は、IEGETSRCでソース全体を抽出し、
URLアドレス部分を(正規表現等で)自分で抽出します。
この手法はかなり応用が利くので、いろいろできるのですが、
正規表現を自在に操れないと厳しいので、
初心者の方には少し難易度が高いですね(;^ω^)
下記の例では、抽出したhtmlから、
正規表現「”https?://[\w/:%#\$&\?\(\)~\.=\+\-]+”」
で全URLアドレスを抜き出し、
さらに「infopanel.jp/lpark/enqRedirect.do?」
を含むURLを呼び出しています。
これで抽出したURLアドレスを使えば、
1円アンケートの自動化などに使えるわけですね!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | IE=CreateOLEObj("InternetExplorer.Application") IE.Visible=True IE.Navigate("http://XXXXXXXXXXXXXXX/") BUSYWAIT(IE) mainbody=IEGetSrc(IE,"BODY") re=CreateOleObj("VBScript.RegExp") re.pattern="https?://[\w/:%#\$&\?\(\)~\.=\+\-]+" re.Global=True re.IgnoreCase=True match=re.Execute(mainbody) //マッチしたものに処理をかける fori=0Tomatch.Count-1 IFbpos("infopanel.jp/lpark/enqRedirect.do?",match.Item(i).Value)>0then IE.Navigate(match.Item(i).Value) ・ ・ ・ endif next |
いかがでしょうか?
これでどんなリンクでもクリックできるはず!(*´з`)
え?リンクだけでなくてボタンもクリックしたい?こちらをどうぞ。

クリックについて、もっと具体的なイメージを掴みたい人はこちらの記事も参考にしてみてください。
