UWSCを使って物販サイトのデータを取得するプログラムを書いています。
初めてのプログラミングのため、悪戦苦闘しながらもある程度は思うように動いてくれています。
下記の状況で、商品画像が1枚以上4枚以下の場合はプログラムはスムーズに動きます。
しかし、画像が0枚の場合(画像準備中)の場合にエラーが出て先に進めなくなりました。
エラー内容は、
「ACCESS VIOLATION AT ADRESS 0068A6B1 IN MODULE 'UWSC.EXE'.READ OF ADRESS 00000000」です。
かなり高いスペックのPCを使っているので、プログラム自体が超高負荷な内容になっているのかもしれません。
・サイトにへログイン。
jpnsoko.jp(仮想)
・全ての商品へ移動。
jpnsoko.jp/shpbrd/all/
・一覧で表示された商品リンクの一番最初のリンクに移動。
jpnsoko.jp/detail/商品ID/all/p1/od
・IE.document.innerHTMLを使って、商品ID(ITEM_ID)・タイトル・説明文を取得。
・画像の保存名や画像srcはIE.document.HTMLからは取得不可なので、
画像をクリックしたら表示されるウィンドウのURLを取得。
jpnsoko/shop/image_view.html?image=ITEM_ID
※画像が0枚の場合は、上記URLのサイトのソースは
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv="Content-Type" content="text/html; charset=euc-jp"></HEAD> <BODY></BODY></HTML> となっていて、<td>タグがないのでエラーになっている。画像が0枚の商品ページ(タイトル説明文や値段等が載っているページ)のソースを見ると、
「noimg」という記述があるので、商品ページのソースをIE.document.innerHTMLで取得して、
「noimg」という記述があった場合は、商品画像ウィンドウを開かずに、
タイトル・説明文等だけ取得して、次の商品ページに遷移するといった操作をしたい。
・テーブルに画像が配置されている。
<table> <img src="http://iau.shop.jp/imgs/3_ITEM_ID.jpg"> <img src="http://iau.shop.jp/imgs/5_ITEM_ID.jpg"> <img src="http://iau.shop.jp/imgs/6_ITEM_ID.jpg"> <img src="http://iau.shop.jp/imgs/7_ITEM_ID.jpg"> <img src="http://iau.shop.jp/imgs/4_ITEM_ID.jpg"> 3_商品ID.jpgの数字は順番に並んでいないので、 GAZO_LINK_CODE = IE.document.innerHTML BETWEENSTR(GAZO_LINK_CODE,"http://iau.shop.jp/imgs/",".jpg") で取得。・IE2.navigate("http://iau.shop.jp/imgs/" + GAZO_LINK_CODE + ".jpg")
で画像だけ表示されるページに移動。
「Ctrl + S」画像保存。
画像が2枚以下だった場合は、ループを抜ける。
FOR KENSUU = 1 TO 100 //商品データ取得を100回繰り返す
FOR GAZO_HOZON_KAISUU = 1 TO 4 //4枚まで画像を取得。
D = "jpnsoko/shop/image_view.html?image" + 商品ID
IE2.navigate(D)
REPEAT
SLEEP(0.1)
UNTIL !IE2.busy AND IE2.readystate = 4
CTRLWIN(IE2_ID,ACTIVATE)
tdTag = IE2.document.getElementsByTagName("td") //画像表示ウィンドウのtdタグの中身取得
tdTag = tdTag.item(0).innerhtml
GAZO_LINK_CODE = BETWEENSTR(tdTag,"http://iau.shop.jp/imgs/",".jpg",GAZO_HOZON_KAISUU)
//↑3_ITEM_IDの部分を取得
IE2.navigate("http://iau.shop.jp/imgs/" + GAZO_LINK_CODE + ".jpg")//画像だけのページを表示
REPEAT
SLEEP(0.1)
UNTIL !IE2.busy AND IE2.readystate = 4
//★★ 画像が2枚未満だった時はループを抜けて次の商品へ。
GAZOU_UMU = IE2.document.title
IFB POS("未検出", GAZOU_UMU) > 0
BREAK
ENDIF
NEXT
IELINK(IE,"次の商品")
REPEAT
SLEEP(0.1)
UNTIL !IE.busy AND IE.readystate = 4
NEXT
回答1件
あなたの回答
tips
プレビュー