お疲れさまです。
いつも回答くださる皆様、本当にありがとうございます。
今回もエクセルのVBAについて教えてください。
今、IE制御ではなくHTTPを使用した、WEBデータの取得を勉強しております。
HTTPでWEBデータを取得した際、WEB上のボタンをクリックしWEB画面が変わった場合
この画面をまたHTTPで取得したいと思います。
こちらの方法どなたか詳しい方がおりましたら、ご教授頂きたくお願いいたします。
取得のURLは以下です(アマゾン)
https://www.amazon.co.jp/%E3%80%90%E3%83%8E%E3%8 …
以下、作成したマクロ
xmlhttpのサブルーチン
Call http.Open("SET", URL, False)
メイン
Set html1 = xmlhttp1.HtmlDocOpen(http1, "https://www.amazon.co.jp/%E3%80%90%E3%83%8E%E3%8 …
For Each 要素 In html1.getElementsByClassName("a-size-small")
DoEvents
If InStr(要素.innerText, "新品の出品") > 0 Then
要素.Click
Exit For
End If
Next
’ここで画面が変わるので、その情報をまたHTTPで制御をしたいです。!!!
For Each 要素 In html1.getElementsByClassName("a-icon a-icon-jp a-icon-prime-jp a-icon-small")
DoEvents
If InStr(要素.innerText, "プライム") > 0 Then
要素.Click
Exit For
End If
Next
’ここで画面が変わるので、その情報をまたHTTPで制御をしたいです。!!!
’今のままですと、一番初めに取得したHTTPからデータを持ってきてしまっております。
If html1.getElementsByClassName("a-size-large a-color-price olpOfferPrice a-text-bold").Length > 0 Then
i = html1.getElementsByClassName("a-size-large a-color-price olpOfferPrice a-text-bold").Length - 1
If i > 2 Then i = 2
For p = 0 To i
Sheet1.Cells(j + 1, 2) = html1.getElementsByClassName("a-size-large a-color-price olpOfferPrice a-text-bold")(p).innerText
Next p
End If
No.2ベストアンサー
- 回答日時:
追加情報です。
本日、ちょっと自分の書いたコードを見直すことがあって、気がついたことですが、私のコードの中で、WinHttp.WinHttpRequest.5.1を使っているものがあります。
XMLHTTP とほぼ同様な使い方だとは思います。
それで、自分はどうしているかというと、また、最初に戻って、URLを与えてて、Openして、必要な箇所を取っていました。
----
Start:
objHTTP.Open "GET", strURL, False
objHTTP.Send
If objHTTP.Status = 200 Then
httpLog = objHTTP.ResponseText
Call LogAnalyzes(httpLog) '-->この中で、次のリンク先アドレスを取得し、strURLに代入し、[Start] に戻るわけです。
Else
MsgBox "アクセスに失敗しました。" & ":" & objHTTP.Status
End
End If
----
だから、ログインなどの手順が必要なものには不向きというか、もう一度、ログインから初めていくという問題があります。しかし、また、そういう操作が必要なものというものは、それほど多くありません。
なお、この手のロボット・データ収集は禁止されている模様です。
https://www.amazon.co.jp/gp/help/customer/displa …
利用許可およびサイトへのアクセス
No.1
- 回答日時:
こんにちは。
最初に、ちょっと気になる部分として、
> xmlhttp1
これで取得して、動的(dynamic)にスムーズに変わりますでしょうか?それを使うのは、新しくもあり、古くからもありですが、動的に変えるのは、やはりIEオブジェクトからの方が楽です。
最初の起動から見ていないのではっきりと明言は出来ませんが、IEではなく、 Document 側も、間違いなければ、HTMLDocumentを使っていらっしゃるようです。
方針を変えたのでしょうか。この場合、確か、画面が変わるのは、HttpHeader の状態から判定するのではなかったかと思います。一応、HttpHeader のログも取ってみたけれど、読み方を完全に忘れてしまいました。
xmlhttp に取得した情報を、POSTして組み立てるようなことをするのだったと思います。私は、xmlHttp 等で連続して取得する方法を知りません。なぜかというと、HttpHeaderのGET/POST の読み方が分からないからです。
今、私は勘違いしているのかもしれませんが、IEで取り続けている
限りは、もともと、そんな必要はないわけです。IEなら、一応、定
まった場所なら、そちらに飛ばせられます。URLさえ取得すれば、
objIE.Navigate URL で、進むからです。
それと、私には分からない部分は、今完全自動化しているようにも見えません。すでに、Class 名が取れているのですから、単発でとっても同じことです。
だったら、もう、Evernote形式で、クリップでデータを取るように、Excel等でインポートしたほうが楽ではないでしょうか。
何か、特別の変更があったようですが。
最後に、この「プライム」は、一体、どこを指しているのか、よく分かりませんでした。
For Each 要素 In html1.getElementsByClassName("a-icon a-icon-jp a-icon-prime-jp a-icon-small")
DoEvents
If InStr(要素.innerText, "プライム") > 0 Then
要素.Click '←こちらは、別の場所に飛ばせられないように思うのですが。
Exit For
End If
Next
ご回答ありがとうございます。
私のプログラムミスもあり、ご指摘の箇所でクリックができておりませんでした。
xmlhttpですとIEよりダントツに早いのと、別の作業がIEでできるメリットがありXMLHTTPを使用しました。
IEですとWEB画面が切り替わると新しい情報を取得してきてくれるのですが、XMLHTTPは一番初めにロードしたページの情報を保持してしまう様です。
色々調べまして、キャッシュの問題等あるようです。
教えて頂いた通り、IEによる制御にしました・・・・
いつもありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA/HTML】特定のタグ要素に...
-
VC++のデバッガでvectorの要素...
-
デジタル時計の時刻合わせの方...
-
マイページはどこを開くの
-
エクセルのシート上に別のシー...
-
Excelでワードアートや図を常に...
-
スクリプトって、何ですか?ど...
-
エクセルVBAでフォームのListbo...
-
ウインドウを毎回同じ位置、大...
-
Javascript_submit()完了後に処...
-
一定時間おきにアラームやポッ...
-
MacのVLCでウインドウの幅の変更
-
window.close()?でエラー
-
Excel VBAでの右クリックのポッ...
-
【javascript】住所から郵便番...
-
WIN10のPCに「制限」のポップ...
-
VBA ポップアップが表示された...
-
画面を閉じる(×ボタンやタスク...
-
【Android】ユーザー補助機能ボ...
-
同じページをブラウザで複数開...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA/HTML】特定のタグ要素に...
-
(VBS) テキストファイル読込で...
-
VC++のデバッガでvectorの要素...
-
【VB.NET】HTML要素を取得しよ...
-
MFCを使って、ひとつのkey(CStr...
-
VBA HTTPを用いたWEB画面の取...
-
bxSliderで動画をスライドごと...
-
JavaScriptでクリップボードの...
-
JQuery、セレクトボックスをル...
-
jqueryでtable内容の置き換え
-
ファンクションキーの既存の機...
-
フォームで入力時自動で次の項...
-
[C++] vector<string> の各要素...
-
Ajax.Updaterで読み込んだ先の...
-
モーダルウィンドウにおける処...
-
スプレッドシートのチェックボ...
-
PL/Iについて、教えてください。
-
エクセルでタグの内容が取得で...
-
ページ全体をスクロールするAja...
-
jQueryで<body>要素にマウスが...
おすすめ情報