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

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

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

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

UWSCでIE操作を行う場合、「リンクのクリック」をしたいことはよくあります。

特にポイントサイトの場合、画面の遷移だけでなく、クリックポイントや検索ポイントを取得する際にも必要ですしねー。(*^-^*)

 

でも、結構ありますよね。

「なんかリンクがクリックできないよ・・・(´・ω・`)」 

ってことが。

 

リンクといっても、単純なaタグだけとは限らず、様々な実装が行われています。

単純にクリックできないことも多々あるんです(;´・ω・)。

 

そんなときはこちらのパターンを参考にしてみてください。(ソースのところをコピーできます)

 

 

aタグの単純な単一リンクをクリックする場合はIELink

最もシンプルなパターンです。

普通のIEのリンクなら、これで十分です。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>)
IE.Visible = True
<span class="hljs-section">IE.Navigate("http://XXXXXXXXXXXXXXX/")</span>
BUSYWAIT(IE)
IELink(IE,<span class="hljs-string">"リンクの表示名"</span>)
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>) IE.Visible = True <span class="hljs-section">IE.Navigate("http://XXXXXXXXXXXXXXX/")</span> BUSYWAIT(IE) IELink(IE,<span class="hljs-string">"リンクの表示名"</span>)
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://XXXXXXXXXXXXXXX/")
BUSYWAIT(IE)

IELink(IE,"リンクの表示名")

 

 

複数のリンクを一括取得したいときはIE.Document.links

ページ内にある複数のリンクを条件に応じて抽出して、まとめて処理したい場合などに使います。

 

例えば、ポイントサイトのあるページにある、クリックポイントをまとめてクリックしちゃいたい時とか。

 

以下の例では、ページ内のリンクを全て取得した後、「clickpoint.php」をアドレスに含むリンクを全てクリック(.Click())するスクリプトになります。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>)
IE.Visible = True
<span class="hljs-section">IE.Navigate("http://XXXXXXXXXXXXXXX/")</span>
BUSYWAIT(IE)
LINK_AMOUNT = IE.Document.links.length
FOR a = 0 TO (LINK_AMOUNT - 1)
IFB POS(<span class="hljs-string">"clickpoint.php"</span>, IE.Document.links[a].href) > 0
IE.Document.links[a].Click()
ENDIF
NEXT
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>) IE.Visible = True <span class="hljs-section">IE.Navigate("http://XXXXXXXXXXXXXXX/")</span> BUSYWAIT(IE) LINK_AMOUNT = IE.Document.links.length FOR a = 0 TO (LINK_AMOUNT - 1) IFB POS(<span class="hljs-string">"clickpoint.php"</span>, IE.Document.links[a].href) > 0 IE.Document.links[a].Click() ENDIF NEXT
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タグとしては、以下のような感じです。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"XXXXXXX"</span>></span><span class="hljs-tag"><<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"YYYY.gif"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"リンクの画像だよ"</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"200"</span> /></span><span class="hljs-tag"></<span class="hljs-name">a</span>></span>
<span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"XXXXXXX"</span>></span><span class="hljs-tag"><<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"YYYY.gif"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"リンクの画像だよ"</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"200"</span> /></span><span class="hljs-tag"></<span class="hljs-name">a</span>></span>
<a href="XXXXXXX"><img src="YYYY.gif" alt="リンクの画像だよ" width="200" /></a>

 

こういう場合は、IE.Document.Imagesで画像を探してあげて、クリックしてする感じになります。

 

以下の例では画像を探した上で、alt属性の値をキーに対象箇所を特定して、画像自体をクリックしています。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>)
IE.Visible = True
<span class="hljs-section">IE.Navigate("http://XXXXXXXXXXXXXXX/")</span>
BUSYWAIT(IE)
IMG_LST = IE.Document.Images
FOR I = 0 TO IMG_LST.length - 1
IFB IMG_LST.Item(I).Alt = <span class="hljs-string">"リンクの画像だよ"</span> THEN
IMG_LST.Item(I).Click()
ENDIF
NEXT
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>) IE.Visible = True <span class="hljs-section">IE.Navigate("http://XXXXXXXXXXXXXXX/")</span> BUSYWAIT(IE) IMG_LST = IE.Document.Images FOR I = 0 TO IMG_LST.length - 1 IFB IMG_LST.Item(I).Alt = <span class="hljs-string">"リンクの画像だよ"</span> THEN IMG_LST.Item(I).Click() ENDIF NEXT
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のみの場合もあります。

このような場合。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"XXXXXXX"</span>></span><span class="hljs-tag"><<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"YYYY.gif"</span>/></span><span class="hljs-tag"></<span class="hljs-name">a</span>></span>
<span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"XXXXXXX"</span>></span><span class="hljs-tag"><<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"YYYY.gif"</span>/></span><span class="hljs-tag"></<span class="hljs-name">a</span>></span>
<a href="XXXXXXX"><img src="YYYY.gif"/></a>

 

この場合は、IESETDATAのタグ指定(TAG=IMG)でクリックします。

「IESETDATA」はかなり万能です。

リンクだけでなく、ボタンやその他のコントロールなど、いろいろなクリックを行うことができます。

 

注意すべき点は、画像のURLは絶対指定(http:~から)という点です。

相対指定されているケースが多いので、サイトのURLを付けてやる必要があります。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>)
IE.Visible = <span class="hljs-keyword">True</span>
IE.Navigate(<span class="hljs-string">"http://XXXXXXXXXXXXXXX/"</span>)
BUSYWAIT(IE)
IESETDATA(IE,<span class="hljs-keyword">TRUE</span>,<span class="hljs-string">"TAG=IMG"</span>,<span class="hljs-string">"http://XXXXXXXXXXXXXXX/YYYY.gif"</span>)
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>) IE.Visible = <span class="hljs-keyword">True</span> IE.Navigate(<span class="hljs-string">"http://XXXXXXXXXXXXXXX/"</span>) BUSYWAIT(IE) IESETDATA(IE,<span class="hljs-keyword">TRUE</span>,<span class="hljs-string">"TAG=IMG"</span>,<span class="hljs-string">"http://XXXXXXXXXXXXXXX/YYYY.gif"</span>)
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では、アンケートへのリンクが以下のようになっていて、スクリプトで処理されています。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<a <span class="hljs-class"><span class="hljs-keyword">class</span>="<span class="hljs-title">c_pointer</span>" <span class="hljs-title">onclick</span>="<span class="hljs-title">openEnqWindow</span></span>(<span class="hljs-string">'https://infopanel.jp/lpark/enqRedirect.do?qid=XXXXXXXXX'</span>,YYYYYY);<span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;<span class="hljs-string">">ZZZに関するアンケート(マンガ)</a></span>
<a <span class="hljs-class"><span class="hljs-keyword">class</span>="<span class="hljs-title">c_pointer</span>" <span class="hljs-title">onclick</span>="<span class="hljs-title">openEnqWindow</span></span>(<span class="hljs-string">'https://infopanel.jp/lpark/enqRedirect.do?qid=XXXXXXXXX'</span>,YYYYYY);<span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;<span class="hljs-string">">ZZZに関するアンケート(マンガ)</a></span>
<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円アンケートの自動化などに使えるわけですね!

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>)
IE.Visible = True
<span class="hljs-section">IE.Navigate("http://XXXXXXXXXXXXXXX/")</span>
BUSYWAIT(IE)
mainbody = IEGetSrc(IE, <span class="hljs-string">"BODY"</span>)
re=CreateOleObj(<span class="hljs-string">"VBScript.RegExp"</span>)
re.pattern = <span class="hljs-string">"https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"</span>
re.Global = True
re.IgnoreCase = True
match = re.Execute(mainbody)
//マッチしたものに処理をかける
for i = 0 To match.Count - 1
IFb pos(<span class="hljs-string">"infopanel.jp/lpark/enqRedirect.do?"</span>, match.Item(i).Value) > 0 then
IE.Navigate(match.Item(i).Value)
<span class="hljs-keyword">endif</span>
next
IE = CreateOLEObj(<span class="hljs-string">"InternetExplorer.Application"</span>) IE.Visible = True <span class="hljs-section">IE.Navigate("http://XXXXXXXXXXXXXXX/")</span> BUSYWAIT(IE) mainbody = IEGetSrc(IE, <span class="hljs-string">"BODY"</span>) re=CreateOleObj(<span class="hljs-string">"VBScript.RegExp"</span>) re.pattern = <span class="hljs-string">"https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"</span> re.Global = True re.IgnoreCase = True match = re.Execute(mainbody) //マッチしたものに処理をかける for i = 0 To match.Count - 1 IFb pos(<span class="hljs-string">"infopanel.jp/lpark/enqRedirect.do?"</span>, match.Item(i).Value) > 0 then IE.Navigate(match.Item(i).Value) ・ ・ ・ <span class="hljs-keyword">endif</span> next
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くじ自動巡回ツール」ですが、いつの間にか、うまく動かなくなってましたね・・・(;^ω^)。まあ、サイト側は変更されるんで、仕方ないんですけど...