「なんかリンクがクリックできないよ・・・」を解決します。
UWSCでIE操作を行う場合、「リンクのクリック」をしたいことはよくあります。
特にポイントサイトの場合、画面の遷移だけでなく、クリックポイントや検索ポイントを取得する際にも必要ですしねー。(*^-^*)
でも、結構ありますよね。
「なんかリンクがクリックできないよ・・・(´・ω・`)」
ってことが。
リンクといっても、単純なaタグだけとは限らず、様々な実装が行われています。
単純にクリックできないことも多々あるんです(;´・ω・)。
そんなときはこちらのパターンを参考にしてみてください。(ソースのところをコピーできます)
aタグの単純な単一リンクをクリックする場合はIELink
最もシンプルなパターンです。
普通のIEのリンクなら、これで十分です。
IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("http://XXXXXXXXXXXXXXX/") BUSYWAIT(IE) IELink(IE,"リンクの表示名")
複数のリンクを一括取得したいときはIE.Document.links
ページ内にある複数のリンクを条件に応じて抽出して、まとめて処理したい場合などに使います。
例えば、ポイントサイトのあるページにある、クリックポイントをまとめてクリックしちゃいたい時とか。
以下の例では、ページ内のリンクを全て取得した後、「clickpoint.php」をアドレスに含むリンクを全てクリック(.Click())するスクリプトになります。
IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("http://XXXXXXXXXXXXXXX/") BUSYWAIT(IE) LINK_AMOUNT = IE.Document.links.length FOR a = 0 TO (LINK_AMOUNT - 1) IFB POS("clickpoint.php", IE.Document.links[a].href) > 0 IE.Document.links[a].Click() ENDIF NEXT
画像リンクをクリックしたいときはIE.Document.Images
リンクに文字ではなく、画像が設定されているリンクもあります。
htmlタグとしては、以下のような感じです。
<a href="XXXXXXX"><img src="YYYY.gif" alt="リンクの画像だよ" width="200" /></a>
こういう場合は、IE.Document.Imagesで画像を探してあげて、クリックしてする感じになります。
以下の例では画像を探した上で、alt属性の値をキーに対象箇所を特定して、画像自体をクリックしています。
IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("http://XXXXXXXXXXXXXXX/") BUSYWAIT(IE) IMG_LST = IE.Document.Images FOR I = 0 TO IMG_LST.length - 1 IFB IMG_LST.Item(I).Alt = "リンクの画像だよ" THEN IMG_LST.Item(I).Click() ENDIF NEXT
特定できる属性が無い画像リンクをクリックしたいときはIESETDATA
上記ではalt属性がありましたが、画像のsrcのみの場合もあります。
このような場合。
<a href="XXXXXXX"><img src="YYYY.gif"/></a>
この場合は、IESETDATAのタグ指定(TAG=IMG)でクリックします。
「IESETDATA」はかなり万能です。
リンクだけでなく、ボタンやその他のコントロールなど、いろいろなクリックを行うことができます。
注意すべき点は、画像のURLは絶対指定(http:~から)という点です。
相対指定されているケースが多いので、サイトのURLを付けてやる必要があります。
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では、アンケートへのリンクが以下のようになっていて、スクリプトで処理されています。
<a class="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円アンケートの自動化などに使えるわけですね!
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) //マッチしたものに処理をかける for i = 0 To match.Count - 1 IFb pos("infopanel.jp/lpark/enqRedirect.do?", match.Item(i).Value) > 0 then IE.Navigate(match.Item(i).Value) ・ ・ ・ endif next
いかがでしょうか?
これでどんなリンクでもクリックできるはず!(*´з`)
え?リンクだけでなくてボタンもクリックしたい?こちらをどうぞ。
クリックについて、もっと具体的なイメージを掴みたい人はこちらの記事も参考にしてみてください。