何をやってもダメで質問させていただきます。要はWebの中の「次へ」のボタンをクリックしたいと思っています。
途中でシートに取り込む箇所が在りますが取り込んでいる様子は全然ないです。Webページの周りのデータは取り込んでいるのですが。
コードは以下の通りです。どうも肝心の「次へ」があるaのタグをスキップしているようです。
なぜこうなるのか分かりません。
Option Explicit
Sub webdata()
Dim objIE As InternetExplorer
Dim doc As HTMLDocument
Dim 取得URL As String
Dim objtsugi As Object
Dim pt As Object
Dim endline As Long
Application.ScreenUpdating = False
取得URL = "http://www.kaigokensaku.mhlw.go.jp/23/index.php? …
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.navigate 取得URL
Do While objIE.Busy Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Set doc = objIE.document
Application.Wait [Now()] + 200 / 86400000
Do While objIE.Busy Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
'*******************
Set pt = doc.getElementById("contentsMainInner")
For Each objtsugi In pt.getElementsByTagName("a")
endline = Cells(Rows.Count, 27).End(xlUp).Row + 1 'ただの確認用です。
Cells(endline, 27) = objtsugi.outerHTML 'ただの確認用です。
If InStr(objtsugi.outerHTML, "次へ") > 0 Then
objtsugi.Click
' Call WaitFor(3)
Exit For
End If
Next
'*******************
objIE.Quit
Set objIE = Nothing
End Sub
No.2ベストアンサー
- 回答日時:
こんにちは
対象サイトをざっと見ただけですが・・・
クリックなさろうとしている要素は、iframeタグの中にありますよね?
iframe内は別の文書(document)なので、読み込まれるタイミングも別々ですし、その文書中の要素はメインの文書の要素ではありません。
ついでに言うと、「次へ」などで表示を切り替える際は、このiframeの部分だけ再読み込みで切り替える仕組みかと思います。
>どうも肝心の「次へ」があるaのタグをスキップしているようです。
メイン文書の直接の子孫要素のようにして取得しようとなさっているので、失敗しているものと想像します。
(上述のように、別文書の構成要素ですので、メイン文書内には存在しない)
以下のような手順でテストしてみました
1)iframeで表示中の文書オブジェクトを取得
2)当該文書の読み込みが完了しているかを確認
3)対象要素を取得(=「次へ」の要素)
4)上記をクリック
きちんと検証はしていませんが、一応、動作すると思いますのでご参考までに。
※ ご提示のコードではリンクタグ全体からループして該当要素を探していますが、
ピンポイントで直接指定できますので、そのように変えてあります。
※ ご提示のコードでは、クリックしたらブラウザをQuitしてしまっているので、
結果が表示できているのか疑問です。(多分、何も確認できない)
ひとまず、STOPで停止させるようにしてあります。
以下のコードを、ご提示のコードのobjIEがreadyになった後に続けてみてください
('******************* のコメント行の次から)
Set doc2 = doc.getElementById("resultListFrame").contentWindow.document
Do While doc2.readyState <> "complete"
DoEvents
Loop
Set nxtElm = doc2.querySelector("#pagerTop li.pagerNext a")
nxtElm.Click
Stop
出来ました。違うドキュメントだったんですね。
有難うございました。夢にまで出てきたのですが良い睡眠がとれそうです。
良かった。・・です。
ついでに表示件数にも挑戦します。これもできそうです。
No.1
- 回答日時:
こんにちは。
まだ、詳しく見たわけではありませんが、そのサイトは通常取れるはずのTagが取れませんね。
どうやら、フレームになっているようで、「次へ」をクリックしても、アドレスには変化ありません。通常だったら、別に「次へ」をクリックしなくても、アドレスから変更できます。
直接、フレームの中のページにアクセスして、「次へ」のタグから、オブジェクトを取り出して、Click する方法しか思いつきません。私は、このようなものは、初めてなので、何のために相手側がしているかを考えると、クローリング対策なのかなと勘ぐってしまいます。
<li class="pagerNext"><a href="javascript:void(0);" onClick="pagerForm(5,5,null,null)
この部分が取れれば、稼働するはずです。
早速のご回答ありがとうございます。
フレームですか?自分の能力を超えているようです。
試してみます。とはいってもどうするかまだ分からない状態です。高い壁が有りそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAで NHK NEWSの NEWSデータ内容取得が できない 1 2023/04/09 12:26
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA/HTML】特定のタグ要素に...
-
WebサイトのHTMLオブジェクトの...
-
JQuery、セレクトボックスをル...
-
VC++のデバッガでvectorの要素...
-
マイページはどこを開くの
-
デジタル時計の時刻合わせの方...
-
ウインドウを毎回同じ位置、大...
-
エクセルのシート上に別のシー...
-
ポップアップウィンドウがブロ...
-
PDFを(htmlのように)無限に縦...
-
一定時間おきにアラームやポッ...
-
VBA ポップアップが表示された...
-
スクリプトって、何ですか?ど...
-
Excelでワードアートや図を常に...
-
[Java] Edgeでのアドレスバー非...
-
Javascript_submit()完了後に処...
-
同じページをブラウザで複数開...
-
エクセルVBAでフォームのListbo...
-
unknownユニキャストフレームと...
-
ページ訪問時にiframe内を自動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ajax
-
(VBS) テキストファイル読込で...
-
VC++のデバッガでvectorの要素...
-
PL/Iについて、教えてください。
-
WebサイトのHTMLオブジェクトの...
-
JQuery、セレクトボックスをル...
-
VBA HTTPを用いたWEB画面の取...
-
AJAXでのinputもしくはoptionな...
-
【VB.NET】HTML要素を取得しよ...
-
どこまでを動的に、どこまでを...
-
モーダルウィンドウにおける処...
-
MFCを使って、ひとつのkey(CStr...
-
[C++] vector<string> の各要素...
-
JavaScriptでクリップボードの...
-
ファンクションキーの既存の機...
-
スプレッドシートのチェックボ...
-
bxSliderで動画をスライドごと...
-
【VBA/HTML】特定のタグ要素に...
-
エクセルでタグの内容が取得で...
-
マイページはどこを開くの
おすすめ情報
「次へ」の上の idタグ の「contentsMainInner」ではOKなのですが「次へ」の上の直ぐ上の「pagerTop」で
Set pt = doc.getElementById("pagerTop")
For Each objtsugi In pt.getElementsByTagName("a")
・
・
・
にするとsetの行は黄色くなりptはnothingになってしまいます。ここが分からないです。
なお途中にblockなどの文字が見えており、ひょっとすると子の文字から下は何かブロックされているのかなとも思っています。