※当サイトの一部記事にはPRが含まれます

UWSCでリンクがクリックできないときに読む。どんなリンクもクリックしちゃう5つの方法。

TIPS
この記事は約8分で読めます。

「なんかリンクがクリックできないよ・・・」を解決します。

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

 

 

いかがでしょうか?

これでどんなリンクでもクリックできるはず!(*´з`)

 

え?リンクだけでなくてボタンもクリックしたい?こちらをどうぞ。

UWSCでログイン・ボタンクリック操作に迷ったら読む。5つのパターン別テクニック
ボタンも画像もOK。UWSCでWEBサイトのクリック操作やログイン処理に悩んだら読んで!HTMLタグ別攻略法。 UWSCでWEBサイトのボタンクリック操作(IEのDOM操作)の処理を書くときに、サイトごとにログインページ等のHTMLが違うの...

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

CMくじ自動巡回ツール修正&UWSC画像クリックのサンプルと解説。
dreevee.comのサイト変更で動かなくなってたので修正しました。 うちで作って公開している「CMくじ自動巡回ツール」ですが、いつの間にか、うまく動かなくなってましたね・・・(;^ω^)。まあ、サイト側は変更されるんで、仕方ないんですけ...