HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0324
さかhtml内容の取得8解決


さか

リンク

2020/3/24(Tue) 09:22:44|NO.89804

webのhtmlの内容を取得したいのですが以下のソースでページ遷移されますが
内容の取得ができません。
これは、web側で何かしらのブロックをしているのでしょうか、それとも書き
方が悪いのでしょうか。
また何か別の取得方法でもあれば教えてもらえると嬉しいです。


newcom ie, "InternetExplorer.Application" ie("Visible") = 1 url="h"+"ttp://www.jra.go.jp/" ie->"Navigate" url ie("silent")=1 ie("Top")=0 ie("Left")=1000 ie("Width")=1000 repeat wait 20 if ie("busy")==0 & ie("ReadyState")==4 :break loop ie->"Navigate" "JavaScript:doAction('/JRADB/accessO.html','pw15oli00/6D')" repeat wait 20 if ie("busy")==0 & ie("ReadyState")==4 :break loop wait 100 doc=ie("document") body=doc("body") a=body("innerHTML") dialog a



この記事に返信する


HSP 初心者

リンク

2020/3/24(Tue) 11:19:06|NO.89806

こういうことですか?


//デスクトップにサイトのソースコードを保存 //参考 : http://hsp.tv/play/pforum.php?mode=pastwch&num=23799 #include "hspinet.as" netinit;初期化 //トップページ取得 neturl "http://www.jra.go.jp/" netdlname dir_desktop+"\\index.html" netload "" exec dir_desktop+"\\index.html",16



さか

リンク

2020/3/24(Tue) 17:47:37|NO.89810

HSP 初心者さん、返信ありがとうございます。

ただ、取得したいのはTOPページではなく、記載したソース実行の移動先のhtmlです。
(TOPページは取得できます)

TOPページからじゃないとエラーになるのとまたパラメータを渡さなくてもエラーと
なるのでneturlだけだと難しいように思います。



さくら

リンク

2020/3/24(Tue) 21:27:43|NO.89814

以下のようなもので、参考になるでしょうか?
htmlのソースだけを取得するのなら、以下の方法で取得できました。
dialog(手抜き)は、適切ではありませんが、取得できたかどうかの確認だけですので勘弁を!


ReturnHTML="" ;***** URLを指定 ***** sURL = "http://www.jra.go.jp/JRADB/accessO.html" charcode = "Shift_JIS" newcom objXMLHTTP, "Microsoft.XMLHTTP" objXMLHTTP->"Open" "GET", sURL, 0 objXMLHTTP->"Send" if objXMLHTTP("status") = 200 { newcom objRS,"ADODB.Stream" if stat!0 : dialog "ADODB.Streamがサポートされていません。",0 : end objRS("Type") = 1 objRS->"Open" sHtml=objXMLHTTP("ResponseBody") objRS->"Write" sHtml objRS("Position") = 0 objRS("Type") = 2 objRS("Charset") = charcode ReturnHTML=objRS("ReadText") objRS->"Close" dialog ReturnHTML }



さくら

リンク

2020/3/24(Tue) 21:36:17|NO.89815

最後にdelcom objXMLHTTPを入れるのを忘れました。
ここでの書き込みは、超久しぶりのためすみません。



さか

リンク

2020/3/24(Tue) 22:32:58|NO.89816

さくらさん、ありがとうございます。

実行してみましたが、やはり取得したいページの前のhtmlでした。
以下の右のパラメータ('pw15oli00/6D')で遷移先とチェックを行っているようです。
doAction('/JRADB/accessO.html','pw15oli00/6D')"

ちなみに最終的に取得したいページは競馬のJRAのオッズです。
怪しいHPではないので最初のソースを実行してみてもらえたらと思います。



さか

リンク

2020/3/24(Tue) 22:43:45|NO.89817

補足です。

内部的に遷移しているようで、url欄に表示されるurlは
http://www.jra.go.jp/JRADB/accessO.html
のまま変わりません。

HPは表示できるのでIEのF12キーで出てくるソースを裏で取得できると便利な
のですが。



いののて

リンク

2020/3/25(Wed) 00:38:06|NO.89821

Webページの動作を見てみるとトップページに対して要求するページの情報をPOST送信して遷移していたので、
それを再現するとブラウザで表示されるものと同じものが取得できました。


#include "hspinet.as" netinit if stat: dialog "インターネット接続に失敗。" : end neturl "http://www.jra.go.jp/" action_url = "/JRADB/accessO.html" // トップページのdoAction関数の左の引数 action_cname = "pw15oli00/6D" // トップページのdoAction関数の右の引数 req_body = "cname="+action_cname netrequest_post strtrim(action_url, 1, '/'), req_body // 処理が終わるまで待機 repeat netexec res if res > 0 : goto *success if res < 0 : goto *error await 50 loop *success // 取得できた netgetv buf mesbox buf, ginfo_winx, ginfo_winy, 1 stop *error // 失敗した dialog "取得に失敗。" stop



さか

リンク

2020/3/25(Wed) 20:51:39|NO.89831

いののてさん、ありがとうございます!

バッチリです! hspinetでこんなにシンプルに出来るんですね。
JRAページからの取得は諦めかけてたのでちょっと感動です。

他にも入力やクリックなどの画面操作はIEコンポーネントからのDOMで行って
いますが、データ取得は時間のかかる場合があるしcomオブジェクトがたまに
エラーになったりするのでIEから脱却したいとこで、さくらさんのような
「Microsoft.XMLHTTP」使ってみたりしてました。
hspinetなら速そうですし安定しそうです。

これで解決とさせていただきます。ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.