お疲れさまです。
いつも回答くださる皆様、本当にありがとうございます。
今回もエクセルの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で質問しましょう!
似たような質問が見つかりました
- スポーツサイクル 自転車のタイヤサイズのえらびかた 3 2023/06/17 21:45
- サバイバルゲーム このタイプの差し込み口ってなんの種類か分かりますか? 3 2022/07/29 15:32
- ZOZOTOWN このタイプの差し込み口ってなんの種類か分かりますか? 2 2022/07/29 15:31
- Amazon 同じAmazonなのに同じ製品の値段が違うのはなぜ!? 5 2022/04/04 00:52
- その他(ネットショッピング・通販・ECサイト) 骨伝導ヘッドセットで この二つは値段が違うだけでは同じですか? 1 2023/02/13 19:13
- その他(生活家電) アイリスオーヤマの真空パック機 2 2022/12/25 18:26
- その他(ネットショッピング・通販・ECサイト) 何度、注文しても 間違った商品が届く 4 2022/08/26 13:48
- バイク車検・修理・メンテナンス アドレス125 スパークプラグを購入したいのですが、熱価はどれですか。 1 2022/05/28 18:56
- その他(パソコン・周辺機器) インターフェースがtype-bのタブレットを使っているのですが、以下のようなデバイスはありませんかね 1 2022/06/11 07:56
- リフォーム・リノベーション 埋込抜け止めダブルコンセント 4 2022/12/01 23:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptでクリップボードの...
-
VC++のデバッガでvectorの要素...
-
【VBA/HTML】特定のタグ要素に...
-
(VBS) テキストファイル読込で...
-
マイページはどこを開くの
-
ウインドウを毎回同じ位置、大...
-
エクセルのシート上に別のシー...
-
デジタル時計の時刻合わせの方...
-
Javascript_submit()完了後に処...
-
[Java] Edgeでのアドレスバー非...
-
別フォームから戻ったときのイ...
-
エクセルVBAでフォームのListbo...
-
【Android】ユーザー補助機能ボ...
-
VBA ポップアップが表示された...
-
小さな表示窓の呼び方は
-
リストビューをスクロールさせ...
-
Excelでワードアートや図を常に...
-
「Cancel = True」とはどういう...
-
親ウィンドウから開いた子ウィ...
-
Excel操作 ウィンドウで出した...
マンスリーランキングこのカテゴリの人気マンスリー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】特定のタグ要素に...
-
エクセルでタグの内容が取得で...
-
マイページはどこを開くの
おすすめ情報