質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

6164閲覧

UWSCでサイトデータ取得の際にエラーが解決出来なくて困っています。

atsu0908

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/08/20 00:01

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

flied_onion

2016/08/20 01:37

コードは ``` で括るか、コードを選択して code ボタンを押してコードブロックにしてください。
atsu0908

2016/08/24 02:46

記述の仕方が未熟で申し訳ありませんでしたm(_ _)m
guest

回答1

0

ベストアンサー

「noimg」という記述があるので

noimgというのが見当たらないですが、tdTagを取得した時に件数チェックしてなければ抜ければ良いのではないでしょうか。

~省略 tdTag = IE2.document.getElementsByTagName("td") //画像表示ウィンドウのtdタグの中身取得 if tdTag.length = 0 then break endif tdTag = tdTag.item(0).innerhtml ~省略

投稿2016/08/20 01:54

flied_onion

総合スコア2604

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atsu0908

2016/08/24 02:45

ありがとうございます! 個数を数えて0個だったら・・・って発想が思いつかなかったです。 うまいこと動いてくれました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問