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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0404
昭和世代HTMLファイルのテキスト抽出が出来なくなりました。6解決


昭和世代

リンク

2020/4/4(Sat) 11:09:14|NO.89949

以前(5年以上前)は正常に抽せん結果を取り込めていたのに(勿論URLは今のものに修正)、
今は抽せん結果が空白の状態で終了してしまいます。但し、スクリプト内に記載しています、
『assert』で、一時停止しワンステップ毎に実行すると期待通りの結果となります。
自分なりに調べてはみましたがヒントが見つからず行き詰っています。
どなた様か解決策等、ご指導願います。

下記がスクリプトでcomobj51をそのまま使っているのですが?
;***** URLを指定してHTMLファイルのテキストを抽出 (comobj51.hsp) *****
;▼mesboxを作成
ReturnHTML="\n\n\n\t▼▼▼▼▼ 現在、テキストを抽出しています。 ▼▼▼▼▼"
font "MS ゴシック",14 : objmode 2
mesbox ReturnHTML,ginfo(10)-4,ginfo(11)-24,5
objectID=0 : objsel objectID
;▼URLを指定
sURL = "https://www.mizuhobank.co.jp/retail/takarakuji/loto/loto6/index.html"
title sURL
;▼IE(InternetExplorer.Application)オブジェクトを作成
newcom objIE, "InternetExplorer.Application"
objIE("Silent") = 1
objIE("Visible") = 0 ;非表示モードで起動
;▼指定URLを開く
objIE->"Navigate" sURL
gosub *busywait

;*注1
//assert //一時停止

objDoc=objIE("Document")
objBody=objDoc("body")
ReturnHTML=objBody("innerText")
objprm objectID,ReturnHTML

;*注2 comobj51.hspに追加部分

noteunsel
notesel ReturnHTML
file_a = dir_cur + "\\loto7結果.csv"
notesave file_a

;▼IEを終了させる
objIE->"Quit"
;▼オブジェクトを破棄
delcom objDoc
delcom objBody
delcom objIE
stop

*busywait
;▼ページの読み込みが終了するまで待つ
title "ページを読み込み中です。"
repeat
wait 10
if objIE("Busy")=0 : break
loop
objDoc=objIE("Document")
repeat
wait 10
if (objdoc("readyState") = "complete") : break
loop
title "ページが表示されました。"
return



この記事に返信する


あらや

リンク

2020/4/4(Sat) 11:55:00|NO.89950

URLがloto6なのに、保存するファイル名がloto7。。。
というのは単なるミスとして。

おそらくですが、以前の形式と
今の形式が変わったせいかと思います。

今の形式では、当選番号や日付・金額といった数値は
ソースには直接書かれておらず、後からJavascriptで
追加するような流れになっているようです。

つまり、ページの読み込みが終わった後に
Javascriptの処理といった具合になっているのが原因かと。

この辺りはPCの処理速度やネットの回線速度にも左右されるのでなんとも言えませんが
私の環境では一応当選番号等のデータはファイルに保存されていました。
(それ以外の情報が多すぎて見つけるのが大変でしたが……)



1つの単純な解決策として
ページ読込終了後にwaitを入れて数秒待つと安定して数値が取得できるかもしれません。



kanamaru

リンク

2020/4/4(Sat) 13:31:20|NO.89954

javascriptが実行されるまでは
表示に時間がかかっております。再度ページを更新するか、しばらくお待ちください。
と表示されるようです。
instrでこれの有無を調べればjavascriptの実行を待機できると思います。



昭和世代

リンク

2020/4/4(Sat) 14:07:51|NO.89955

早速の回答有難う御座います。
あらやさん
 PCは8年前に組み立てたもので、やはり今となっては非力すぎですかね。
 Loto6は色々なURLを試していた時の戻し忘れです。お恥ずかしい限りです!
 本題の件ですが、確かに無条件にwaitで時間稼ぎ(確実なのは10秒程)を他の案件(株式情報サイト)
 で実施していたのですが、読込件数が100件、200件と多いと時間が掛かりすぎて困っていて、
 同様な宝くじのサイトで、何か策がないのか試していたのですがギブアップ。
kanamaruさん
 確かに、希望の項目があるかチェックして、retryしても結局、再起動しているのでダメな場合が
 多いです。

結局、waitで十分な時間を取り、読込内容をチェックしながら使うか、PCのパワーアップになるのでしょうか。



昭和世代

リンク

2020/4/4(Sat) 14:52:49|NO.89957

kanamaruさん
 ヒント有難うございます。
 『instrで期待のキーワードを検索して待つの』の意味が理解出来ました。
 期待データが取得出来ていない場合の、戻し位置を『objDoc=objIE("Document")』の所からやれば
 うまく行きました。今までは、最初から『objIE->"Navigate" sURL』やっていました。
 知識不足で浅はかな返信してしまった事をお詫びします。



kanamaru

リンク

2020/4/4(Sat) 15:07:11|NO.89958

気にしないでください。
僕にも勉強になりました。
僕の場合は、innreTextからやり直していましたが、(いくら待っても取得が終わらなかった)
Documentからやり直す必要があったのですか。



昭和世代

リンク

2020/4/4(Sat) 16:10:06|NO.89960

あらやさん
kanamaruさん
 結局、TEXT内に期待するキーワードの有無を確認して対応することにしました。
 稚拙な質問にも早々に対応頂き有難う御座いました。



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