質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

351閲覧

VBAでウェブサイトのテーブルの1要素をクリックする方法をご教示ください。

mitsu721nk

総合スコア1

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2023/06/06 06:09

編集2023/06/06 07:15

内容に不備があるとご指摘をいただきましたので、修正いたします。
至らぬ点が多く申し訳ございませんが、よろしくお願いいたします。

以下のVBAコードで客先ウェブサイトに記載されているテーブルから一要素をクリックしたいのですが、
正しく要素が特定できていないせいか、太字部分が実行されません。

【実行環境】
Windows 10Pro

【やりたいこと】
対象のウェブサイトにログインし、指定箇所をクリックして内容の確認を自動化したいです。
しかし、指定箇所の要素が正しく特定されておらず、クリックされません。
クリックしたい箇所は以下HTMLの**<A HREF = "BudS05_FR.asp" ONCLICK="Link_Nouki('Z')">1</A>**になります。

【試したこと】
以下の修正コードを試しましたが、同じ結果となりました。
For Each tag In links
If tag.getAttribute("href") = "BudS05_FR.asp" And tag.getAttribute("onclick") Like "Link_Nouki*" Then
Set targetElement = tag
Exit For
End If
Next tag

その他、インターネット等で様々な方法を試みましたが、改善に至っていない状況です。
知識不足で申し訳ございませんが、何卒ご指導をいただけますと幸いです。

【VBAコード】
Sub LoginMacro()
Dim objIE As InternetExplorer
Dim win As Object
Dim winshell As Object
Dim URL As String
Dim UserName As String- リスト
Dim Password As String
Dim searchButton As Object
Dim TagIndex As Integer
Dim Elements As Object
Dim Element As Object

Set winshell = CreateObject("Shell.Application") ' Internet Explorerの新しいインスタンスを作成 Set objIE = CreateObject("InternetExplorer.Application") ' URLと認証情報を設定 URL = "https://xxxxx.jp" UserName = "user name" Password = "pass word" ' Internet Explorerを表示 objIE.Visible = True ' 指定されたURLにアクセス objIE.navigate URL For Each win In winshell.Windows If win.Name = "Internet Explorer" Then Set objIE = win Exit For End If Next Application.Wait Now + TimeValue("0:00:05") For Each win In winshell.Windows If win.Name = "Internet Explorer" Then Set objIE = win Exit For End If Next ' ページの読み込みが完了するまで待機 Do While objIE.Busy = True DoEvents Application.Wait Now + TimeValue("0:00:05") Loop Do While objIE.readyState <> 4 Application.Wait Now + TimeValue("0:00:05") DoEvents Loop Application.Wait Now + TimeValue("0:00:05") Dim HTMLDoc As HTMLDocument Set HTMLDoc = objIE.document With HTMLDoc ' ユーザー名とパスワードを入力 .getElementById("Ecom_User_ID").Value = UserName .getElementById("Ecom_Password").Value = Password ' OKボタンをクリック .getElementsByClassName("btn-login")(1).Click Debug.Print "Button-name: " & .getElementsByClassName("btn-login")(1).Value Application.Wait Now + TimeValue("0:00:05") ' 検索ボタンをクリック Set searchButton = .getElementsByName("Kensaku")(0) searchButton.Click Application.Wait Now + TimeValue("0:00:05") Do While objIE.readyState <> 4 Application.Wait Now + TimeValue("0:00:05") DoEvents Loop ' Find the desired element Set Elements = HTMLDoc.getElementsByTagName("A")

** For Each Element In Elements
If Element.getAttribute("HREF") = "BudS05_FR.asp" And Element.getAttribute("ONCLICK") = "Link_Nouki('Z')" Then
' Click the element
Element.Click
Exit For
End If
Next Element**

End With Set objIE = Nothing

End Sub

【HTML(一部省略)】
HTML>

<head> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" /> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <META NAME="GENERATOR" CONTENT="Microsoft FrontPage 2.0"> <TITLE>進捗状況結果画面</TITLE> </HEAD> ボールドテキスト </TABLE> </TD> <TD WIDTH="15%" ALIGN="CENTER"> <TABLE BORDER="1" CELLSPACING="0" CELLPADDING="0" WIDTH="" BGCOLOR="White">
<TD WIDTH="15%" ALIGN="CENTER"> <TABLE BORDER="1" CELLSPACING="0" CELLPADDING="0" WIDTH="" BGCOLOR="White"> <TR> <TD ALIGN="CENTER" BGCOLOR=powderblue WIDTH="10%" NOWRAP HEIGHT="16"> <FONT SIZE="2"><B>MK納期確定当日</B></FONT></TD> </TR> <TR> <TD ALIGN="CENTER" WIDTH="10%" NOWRAP HEIGHT="16"> <FONT SIZE="2">

0
</FONT></TD>
</TR>

<TR> <TD ALIGN="CENTER" WIDTH="10%" NOWRAP HEIGHT="16"> <FONT SIZE="2"> <A HREF = "BudS05_FR.asp" ONCLICK="Link_Nouki('1')">1</A>
<!-- 1-->
</FONT></TD> </TR> <TR> <TD ALIGN="CENTER" WIDTH="10%" NOWRAP HEIGHT="16"> <FONT SIZE="2">

0
</FONT></TD>
</TR>

<TR> <TD ALIGN="CENTER" WIDTH="10%" NOWRAP HEIGHT="16"> <FONT SIZE="2">

0
</FONT></TD>
</TR>

<TR> <TD ALIGN="CENTER" WIDTH="10%" NOWRAP HEIGHT="16"> <FONT SIZE="2">

0
</FONT></TD>
</TR>

<TR> <TD ALIGN="CENTER" WIDTH="10%" NOWRAP HEIGHT="16"> <FONT SIZE="2">

0
</FONT></TD>
</TR>

<TR> <TD ALIGN="CENTER" WIDTH="10%" NOWRAP HEIGHT="16"> <FONT SIZE="2">

0
</FONT></TD>
</TR>

<TR> <TD ALIGN="CENTER" WIDTH="" NOWRAP HEIGHT="16"> <FONT SIZE="2"> ** <A HREF = "BudS05_FR.asp" ONCLICK="Link_Nouki('Z')">1</A>**
<!-- 1-->
</FONT></TD> </TR> </TABLE> </TD>
</TABLE> <TABLE> <FONT SIZE="2">    * 数字をクリックすると各処理画面へ遷移します。</FONT> </TABLE> <FORM NAME="FORM4" METHOD="POST" ACTION="BudS05_FR.asp" TARGET="_top"> <INPUT TYPE="HIDDEN" NAME="hdnSenimoto_S02" VALUE="MK" SIZE=2> <INPUT TYPE="HIDDEN" NAME="hdnPriority_Code_bef" VALUE=""SIZE=1> <INPUT TYPE="HIDDEN" NAME="hdnMaker_bef" VALUE="A412"SIZE=4> <INPUT TYPE="HIDDEN" NAME="hdnDepo_bef" VALUE=""SIZE=2><BR> <INPUT TYPE="HIDDEN" NAME="hdnJishaHantei" VALUE="1"> </FORM> <FORM NAME="FORM5" METHOD="POST" ACTION="BudS05_FR.asp" TARGET="_top"> <INPUT TYPE="HIDDEN" NAME="hdnSenimoto_S02" VALUE="MI" SIZE=2> <INPUT TYPE="HIDDEN" NAME="hdnPriority_Code_bef" VALUE=""SIZE=1> <INPUT TYPE="HIDDEN" NAME="hdnMaker_bef" VALUE="A412"SIZE=4> <INPUT TYPE="HIDDEN" NAME="hdnDepo_bef" VALUE=""SIZE=2><BR> <INPUT TYPE="HIDDEN" NAME="hdnJishaHantei" VALUE="1"> </FORM> <FORM NAME="FORM6" METHOD="POST" ACTION="BudS05_FR.asp" TARGET="_top"> <INPUT TYPE="HIDDEN" NAME="hdnSenimoto_S02" VALUE="SA" SIZE=2> <INPUT TYPE="HIDDEN" NAME="hdnPriority_Code_bef" VALUE=""SIZE=1> <INPUT TYPE="HIDDEN" NAME="hdnMaker_bef" VALUE="A412"SIZE=4> <INPUT TYPE="HIDDEN" NAME="hdnDepo_bef" VALUE=""SIZE=2><BR> <INPUT TYPE="HIDDEN" NAME="hdnJishaHantei" VALUE="1"> </FORM> <!--確認画面への受渡し--> <!--直送対応画面への受渡し--> <!--メーカー納期確定当日画面への引渡し--> <FORM NAME="FORM9" METHOD="POST" ACTION="BudS05_FR.asp" TARGET="_top"> <INPUT TYPE="HIDDEN" NAME="hdnSenimoto_S02" VALUE="NT" SIZE=2> <INPUT TYPE="HIDDEN" NAME="hdnPriority_Code_bef" VALUE=""SIZE=1> <INPUT TYPE="HIDDEN" NAME="hdnMaker_bef" VALUE="A412"SIZE=4> <INPUT TYPE="HIDDEN" NAME="hdnDepo_bef" VALUE=""SIZE=2><BR> <INPUT TYPE="HIDDEN" NAME="hdnJishaHantei" VALUE="1"> </FORM> <!--メーカー納期確定画面への引渡し--> <FORM NAME="FORM10" METHOD="POST" ACTION="BudS05_FR.asp" TARGET="_top"> <INPUT TYPE="HIDDEN" NAME="hdnSenimoto_S02" VALUE="NK" SIZE=2> <INPUT TYPE="HIDDEN" NAME="hdnPriority_Code_bef" VALUE=""SIZE=1> <INPUT TYPE="HIDDEN" NAME="hdnMaker_bef" VALUE="A412"SIZE=4> <INPUT TYPE="HIDDEN" NAME="hdnDepo_bef" VALUE=""SIZE=2><BR> <INPUT TYPE="HIDDEN" NAME="hdnJishaHantei" VALUE="1"> </FORM> <!----------------------------------------------------------------------------> <SCRIPT LANGUAGE="VBScript"> <!-- Dim strprt_code Sub Link_MAKER(strprt_code) If strprt_code ="Z" Then Else FORM4.hdnPriority_Code_bef.VALUE = strprt_code End If Call FORM4.SUBMIT() End Sub Sub Link_MIKAITOU(strprt_code) If strprt_code ="Z" Then Else FORM5.hdnPriority_Code_bef.VALUE = strprt_code End If Call FORM5.SUBMIT() End Sub Sub Link_SAICHO(strprt_code) If strprt_code ="Z" Then Else FORM6.hdnPriority_Code_bef.VALUE = strprt_code End If Call FORM6.SUBMIT() End Sub Sub Link_KAKUNIN() Call FORM7.SUBMIT() End Sub Sub Link_CHOKUSOU() Call FORM8.SUBMIT() End Sub '''2005.05.30→ Sub Link_Nouki(strPrm) If strPrm = "Z" then Else Form9.hdnPriority_Code_bef.Value = strPrm End if Form9.Submit() End Sub Sub Link_NoukiAll(strPrm) If strPrm = "Z" then Else Form10.hdnPriority_Code_bef.Value = strPrm End if Form10.Submit() End Sub '''2005.05.30← Sub WinOpn() End Sub Sub ReturnMenu() parent.location = "BUD_MENU.asp" End Sub --> </SCRIPT> </BODY> </HTML>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2023/06/06 08:10

InternetExplorer は既にサポート終了してますので使うの危険です。 別の方法を検討してください。 VBAからWEB操作する場合、今なら SeleniumBasic がマストでしょう。 SeleniumBasic で検索すると解説ページがいろいろ見つかります。
guest

回答1

0

ありがとうございます。そちらの方法で試してみたいと思います。

投稿2023/06/06 09:00

mitsu721nk

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問