|
この年末にすみません。あと成人向け内容を含んでいてすみません。
所持本をリスト化する為、ISBNコードでネット検索(http://www.e-hon.ne.jp/bec/EB/Top)しようと しています。通常は問題無いのですが、成人本の年齢確認ページが直前に出ると、データが 取得できなくなります。 デバッガでステップ実行すると問題無く動くので、挙動が早すぎるのかとsleep()を入れたり しているのですが、空欄のまま正常終了したり、IE描画は終わっているのに、ie.busyがfalseに ならなくてループして終わらないとか現象がよく分からず解決できていません。
今は別窓で成人指定チェックを通過させた状態で実行して逃げてますが、モヤモヤしてます。 どうしたらうまくいくか分かりますでしょうか?
環境は、Win8.1Pro64 IE11 UwscPro5.2.3.0 です。
よろしくお願います。
//クリップボードに9784873066868を入れて実行すると再現すると思います。
// 入力文字からISBN13を取り出してE-honからタイトル取得 // クリップボードにJAN入れて起動するとIEでタイトル取得し、 // 整形してクリップボードに戻す // // テスト用ISBN 9784873066868
// クリップボードが空ならinputさせる isbn13org = GetStr(0) if isbn13org = "" then isbn13org = Input( "isbnコード13桁",isbn13org )
isbn13 = ""
// 入力文字の先頭から数値13文字分をISBN13として切り出す isbn13orgLen = Length(isbn13org)
For i = 1 To isbn13orgLen c = Copy(isbn13org,i,1) if ChkNum(c) Then isbn13 = isbn13 + c // 数字ならisbn13に追加 if Length(isbn13) >= 13 Then Break Next if Length(isbn13) < 13 Then MsgBox("数値13文字以下は強制終了<#CR>" + isbn13org) ExitExit EndIf
IE = CreateOleObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("http://www.e-hon.ne.jp/bec/SA/Forward?mode=speed&button=btnSpeed&scope=1&spKeyword=" + isbn13 ) COM_ERR_IGN // COMエラー無視
BusyWait(IE) // 接続表示待ち
// 成人指定チェック画面に飛ばされたら[はい]を押す IEhtml = IE.document.body.innerHtml if Pos("あなたは18歳以上ですか?", IEhtml) > 0 Then // 成人警告文の確認 IELink(IE, "はい") BusyWait(IE) EndIf ////////////////////////////////////////
// e-hon個別ページ // 個別ページから作品名と著者名を取得 IEtitle = IEGetData(IE, "TAG=TITLE") 作品名 = Trim(BetweenStr(IEtitle,,"/"),True) // 先頭から/まで If Pos("/著", IEtitle) > 0 Then 著者名 = Trim(BetweenStr(IEtitle, "/","/著"),True) // /から/著まで Else 著者名 = Trim(BetweenStr(IEtitle, "/","著"),True) // /から"著"まで EndIf
//////////////////////////////////////////
IEtext = IE.document.body.innerText 発売日 = Trim( BetweenStr( IEtext, "出版年月 :","月") + "月")
// 出力するタイトルを生成
// 著者追加 作品名追加 出力 = " [" + Trim(著者名) + "] " + Trim(作品名)
// 日付追加 "/"は "-"へ置換する 出力 = 出力 + " (" + Replace(発売日,"/","-") + ")"
// isbn13追加 出力 = 出力 + "(ISBN" + isbn13 + ")"
// 最初の入力文を先頭に追加 出力 = isbn13org + 出力
SendStr(0, 出力)
Fukidasi(出力) Sleep(2) IE.Quit
// 終了
////////////////////////////////// // IEの表示待ち Procedure BusyWait(ie) Repeat Sleep(0.2) ie_busy =ie.busy ie_readyState = ie.readyState Until (! ie.busy) and (ie.readyState=4) Fend //////////////////////////////////
|
No.3344 2016/12/30(Fri) 18:50:27
|
☆ Re: ステップ実行なら動くのですが / routa |
|
No.3353 2017/01/03(Tue) 18:10:15
|
|
☆ Re: ステップ実行なら動くのですが / kwood |
|
|
routa 様
うまくいきました! ありがとうございます。
|
No.3355 2017/01/04(Wed) 19:40:49
|
|