• ベストアンサー

UWSCを使って画像リンクをクリックするとき???

UWSCを使って画像リンクをクリックするとき??? 先日UWSCをダウンロードし、画像リンクを自動でクリックするスクリプトを作りました。 インターネット上で、商品を選んで「予約購入する」という画像リンクをクリックしたいのですが Ifb CHKIMG("予約購入する.bmp") = TRUE THEN   BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y) Endif のように作っても全く動きません。 UWSC40ファイルの中に予約購入する.bmpを保存してます。 うーん一体どうして?昨日から調べているけど全くわかりません。 回答よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • aurumnet
  • ベストアンサー率43% (51/117)
回答No.6

別の内容になってきてしまうのでこれ以上のことは別スレたててね ウィンドウタイトルを取得してアクティブかさせてPageDownキーの入力を追加してみました OPTION EXPLICIT Dim x_max,y_max,TITLE,STEP_END Dim i,id x_max=1000 //検索範囲x方向最大 y_max=1000 //検索範囲y方向最大 TITLE="Firefox" //ウィンドウのタイトル STEP_END=3 //pagedownを繰り返す数 id=GETID(TITLE) MSGBOX("画像認識") FOR i=0 TO STEP_END STEP 1 ifb CHKIMG(".\question.bmp",0,0,0,x_max,y_max,0,IMG_MSK_BGR4) CTRLWIN(id,ACTIVATE) BTN(LEFT, CLICK,G_IMG_X, G_IMG_Y) MSGBOX("画像ありました") else   MSGBOX("画像なし") Endif CTRLWIN(id,ACTIVATE) KBD(VK_NEXT,CLICK) NEXT

kabu1121
質問者

お礼

これで自動予約ができるようになりました☆ ありがとうございます。 な・・のですが、最後に1つだけ質問させてください。 たまにページ2のほうでプログラムが止まる時があります。 ページダウンしなかったり、ページダウンしても画像を見つけてくれなかったり・・。 マウスは動かないので、クリックがずれているとかではなくて 画像を見つけてないんだと思います。1ページ目は問題ありません。 よろしくお願い致します。 OPTION EXPLICIT Dim x_max,y_max x_max=1000 //検索範囲x方向最大 y_max=1000 //検索範囲y方向最大 ifb CHKIMG(".\予約.bmp",0,0,0,x_max,y_max,0,IMG_MSK_BGR4) BTN(LEFT, CLICK,G_IMG_X+86, G_IMG_Y+27) Endif ACW(GETID(ページ2) BTN(LEFT,CLICK,505,245,20) KBD(VK_NEXT,CLICK,40) KBD(VK_NEXT,CLICK,40) sleep(0.1) ifb CHKIMG(".\OK.bmp",0,0,0,x_max,y_max,0,IMG_MSK_BGR4) BTN(LEFT, CLICK,G_IMG_X+42, G_IMG_Y+10) Endif

その他の回答 (6)

  • aurumnet
  • ベストアンサー率43% (51/117)
回答No.7

>OPTION EXPLICIT >Dim x_max,y_max これは変数を明示的に表記する方法なだけなんで別に消しても大丈夫ですよ。 >ACW(GETID(ページ2) これはなにでしょうか・・・ ACWはページの状態(大きさや位置)を変更するものですが・・・ ACW( ID, x, y, [幅, 高さ, ms] ) GETID()の部分はいいのですがその後のパラメータとACWの関数の括弧閉じるがありません。 >ifb CHKIMG(".\予約.bmp",0,0,0,x_max,y_max,0,IMG_MSK_BGR4) >BTN(LEFT, CLICK,G_IMG_X+86, G_IMG_Y+27) >Endif >ACW(GETID(ページ2) >BTN(LEFT,CLICK,505,245,20) ページ1から2に移るのかな?それだと間にSleepで時間を入れておかないとブラウザの処理がおいつかないことがあります

kabu1121
質問者

お礼

最後まで回答ありがとうございます。 ページ2は晒すと若干まずいので、変えました。 SLEEPですねー。ありがとうございます。 もし答えられたら答えていただきいのですが 3回に1回は再生しても全く動かないとき、動きだすのが遅いときがあります。 それはなぜなのでしょうか?? 本当に最後にすみませんがよろしくお願い致します。

  • aurumnet
  • ベストアンサー率43% (51/117)
回答No.5

画像の位置はスクリプトの場所とおなじで画像の色識別範囲に幅をもたせてみました。 画像検索範囲は自分で変えてください。 jpegしかアップできないようなので画像変換かあたらしく画像用意してください・・・ OPTION EXPLICIT Dim x_max,y_max x_max=1000 //検索範囲x方向最大 y_max=1000 //検索範囲y方向最大 MSGBOX("画像認識") ifb CHKIMG(".\question.bmp",0,0,0,x_max,y_max,0,IMG_MSK_BGR4) BTN(LEFT, CLICK,G_IMG_X, G_IMG_Y) MSGBOX("画像ありました") else  MSGBOX("画像なし") Endif

kabu1121
質問者

お礼

わかりましたっ!! オンマウスのときに微妙に色が白く変わるせいで、その白く変わった画像を保存していたせいでした。 おかげさまで画像認識できました・・!! ありがとうございます☆ ちなみにたとえばボタンがしたのほうにあってスクロールしないと見つからない場合 そのページ内を探すときはどうしたら良いんですかね??

  • aurumnet
  • ベストアンサー率43% (51/117)
回答No.4

#2です あと画像に余白部分とかないですよね? 余白部分のところでパターンが一致しないのでみつけれてない可能性もあります そのような場合は、画像を加工する必要があります。 具体的には単に余分な部分をぬいた画像をトリミングしてくりぬいちゃえばいいだけです。 以下余談 私の場合はネットのログイン操作を画像認識ではなく、IE制御で行っております。

kabu1121
質問者

お礼

余白とかでウーーーーンと考えたところオンマウスのせいでは??? と思い別の画像で試してみたらできましたー。大変おさわがしました。 IE制御ググってみたけどかなり使えそうですね! フリーソフトなのでしょうか?できれば使ってみたいと思います☆

noname#194317
noname#194317
回答No.3

画像の置き場所ですが、chkimgで指定する時にパスを一切付けなかったら、それはスクリプトと同じフォルダにあるという意味になります。少なくとも、私のところではそれで動いています。今の話からでは、スクリプトがどこにあるかが解らないため、exeと同じ場所で正解かどうかは不明です。 あと、どこでうまくいっていないのかを調べる必要もあるでしょう。画像を見つけてなければどうしようもないので、ifbの中にmsgbox("あった")などというテストメッセージを入れておき、見つけたかどうかを調べます(この方法はデバッグ時に非常に役に立ちます)。また、画像で処理する場合は1ドットでも違っていたら、またパレットの値が1でも違っていたら、もう別物と言うことでchkimgでは見つけられませんので、それも注意が必要です。パレットに関しては、chkimgの引数で幅を持たせられるため、それで回避できますが。 画像は見つけているけどうまく動かないのなら、No2さんの言う「もう少し画像の真ん中よりをクリックする」ようにしないとダメでしょう。「予約購入する.bmp」の幅と高さはあらかじめ調べておけるわけですから、G_IMG_X,G_IMG_Yに「予約購入する.bmp」の幅・高さを半分にしたものを足せば、ど真ん中をクリックできるので、より確実に動きます。 今回は多分大丈夫だろうと思いますが、chkimgはあまり小さい画像は見つけられないようです。縦あるいは横が16ドット以上ない画像は使えないと考えておいた方が確実です。

kabu1121
質問者

お礼

ありがとうございます。 まだできません・・・。画像は172×54なので87、27をそれぞれたしました。 画像の保存手順ですが、ネットのページ上で右クリック、画像を保存で合ってますよね? それをBMP形式に変換して同じフォルダ内に保存しているのですが・・・。 ウーンメッセージが表示されません。 かといって予約.bmpが見つかりませんとの表示もでません。一体なぜでしょうか? 上司からすぐにやるようにと言われてまして非常に困ってます>< ifb CHKIMG(".\予約.bmp",-1)    x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 MSGBOX("ありました")    BTN(LEFT, CLICK, x+87, y+27)   Endif

kabu1121
質問者

補足

そもそもCHECK関数でその画像がきちんと表示されているのかな?と思って ifb (CHKIMG(画像名, 0, 左上X, 左上Y, 右下X, 右下Y) MSGBOX("画像ありました") MSGBOX("画像の左上位置は(" + G_IMG_X + ", " + G_IMG_Y + ")です") endif これを使ったのですが、画像名のところに予約.bmpを入れてもおかしな変数ですという表示がでてしまいます。もー泣きたいですね。 このOKWAVEの画面ですと質問するというボタンをクリックするというスクリプトを作りたいのに・・。 わからない。

  • aurumnet
  • ベストアンサー率43% (51/117)
回答No.2

#1さん時間がなくても実行できますよ optionの時間は実行されるまでの時間なのでクリックしている時間ではありません。 何も指定しなかった場合、すぐさま実行されます 質問に対しての回答ですが、 画像ファイルはどこに保存されているでしょうか? uwscの実行ファイルと同じ場所でしょうか? たしか使った記憶では 実行ファイルからの相対位置を指定しなければならなかった気がします。 (UWSCのスクリプトファイルからの位置ではない) それと >BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y) のままでは画像の端っこをクリックするためクリック判定がミスする可能性もあります CLICK,G_IMG_X+5,G_IMG_Y+5などすこし画像の真ん中よりに設定するほうがいいと思います

kabu1121
質問者

お礼

画像は同じフォルダに保存しております。 再生を押しても全く動く気配がなく、どうしてできないのかぜんぜんわかりません・・。 たとえばインターネット上のロゴでも同じですよね? ロゴの画像をBMP保存して、以下のプログラムを組むと・・。 だというのにぜんぜんワカラナイ。最初はクリックで座標を覚えさせてうまくいったのですが 画面の大きさがそのときどきで変わるため、画像リンクをクリックするようにしました。 TABキーでクリックもできるのですが、微妙なズレがあり断念・・。 もう一度よろしくお願い致します。 ifb CHKIMG(".\予約.bmp",-1)    x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入    BTN(LEFT, CLICK, x+5, y+5, 250)   Endif

  • nekonynan
  • ベストアンサー率31% (1565/4897)
回答No.1

作成例  ifb CHKIMG(".\新聞.bmp",-1)    x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入    BTN(LEFT, CLICK, x, y, 250)   Endif    250msあいだクリックする    CLICKする時間が書いてないからそれは動きません

kabu1121
質問者

お礼

ありがとうございます。 コピペして実行してみましたがうまくいきません・・? 画像は「予約.bmp」でプログラムと同じフォルダに保存していますが・・ なぜでしょうか?

関連するQ&A

  • UWSCの画像認識について

    質問させていただきます ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif これを複数の画像でやりたいときは ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif のようにしないとだめなのでしょうか? それとも ifb CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif こんな感じにまとめる事はできるのでしょうか? 例として教えてもらえると助かります。 よろしくお願いします

  • uwscについて

    画像認識で質問があります。 画像Aがあった場合画像Aをクリックするのは出来るのですが 画像Aがあった場合画像Bをクリックする場合どのようにすればいいのでしょうか? IFB (CHKIMG("A.bmp")=TRUE) THEN SLEEP(0.3) //B、C出現までの間を調整 IFB (CHKIMG("B.bmp")=TRUE) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_y) ELSEIF (CHKIMG("C.bmp")=TRUE) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_y) ENDIF しらべてこのとおりやってみたら 最初のIFBに対してENDIFがないと言われてうまくいきません ちょっと調べたのですが分からなかったので助けてください

  • UWSCについて

    画像がAになったらその画像をクリックしてBに変わったらまたクリックするというのを作りたいのですがどうにもA画像の時にクリックが連打になってしまします どこが悪いのでしょうか? While True Ifb ChkImg("A.bmp",0) BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,80) ChkImg("B.bmp",0) BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,80) ENDIF WEND

  • UWSCのプログラミングついて教えてください。

    UWSCについてです。 私は、UWSCをまだ1週間ほどしか触っていない超初心者です。 下記のようなプログラミングを組みたいと思っているので、プログラミング初挑戦なので右も左も良く分かっていません。 UWSCのプログラミングに詳しい方助けてください。 私の組みたいプログラミングは ("A.BMP",0)を無制限ループしつつ、("B.BMP",0)は2時間おきにループしつつ、("C.BMP",0)を30分間に30回実行する 場合のプログラミングです。【3つ同時進行です。】 宜しくお願いします。 while True ifb CHKIMG("A.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif ifb CHKIMG("B.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif ifb CHKIMG("C.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif wend

  • UWSCのスクリプトについて

    画像Dを認識したら画面上に画像Bがあっても 処理Bを実行しない為にはどうしたら良いでしょうか。 -------- while True BTN(LEFT,click,150,10,110)   //処理A Sleep(2) ifb CHKIMG("A.bmp")    x=G_IMG_X            y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) endif Ifb ChkImg("B.bmp")       //処理B BTN(LEFT,click,1120,90,110) Sleep(1) KBD(VK_return,DOWN,30) endif ifb CHKIMG("C.bmp")      //処理C x=G_IMG_X            y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) wend --------

  • UWSCの画像認識について

    プログラム初心者ですがUWSCでプログラムを作っています 画像認識において認識するべき画像が複数種類あるときのパターンができなくて困っています ifb CHKIMG("青空") x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT,CLICK,x,y,100) SLEEP(0.5) else Endif のように、単独の画像を認識し、その画像をクリックさせることはできるのですが 「青空」もしくは「夕空」もしくは「夜空」が出た時にその画像をクリックする のような命令をかくことができません ifb CHKIMG("青空" or "夕空" or"夜空") のような形でかければいいのですが、もちろんこれでは動きませんでした どうすればこれを実行できるようになるのか教えてくださいm(__)m

  • UWSCのスクリプト作成について

    UWSC初心者です。 画像を判別して、見つけたらクリックするものを作りました。 while True   if GETKEYSTATE(VK_ESC) then exit   ifb CHKIMG("目標.bmp")          BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)  endif sleep(2)  wend 目的は動きのある目標を認識してクリックしたいのですが、作り方が分からないので、とりあえず目標を画像判定で少しでもクリックできればと作りました。 でもやはり画像判定の場合は目標.bmpと一致でなければならないので、たまにしかクリックしてくれません。 なので、目標をいろいろな角度から画像保存し、数で攻めたいと思います。 目標.bmp→クリック ↓なし 目標1.bmp→クリック ↓なし 目標2.bmp→クリック というものを作りたいのですが、混乱してきて分からないので教えてください。

  • UWSCで指定箇所のみループ

    UWSCで指定した箇所へ戻ってループさせたいのですが、やり方がわかりません。 上手く説明ができないのですが… 例えば… while True Z地点 //Aの画像があればクリックしてX地点へ ifb CHKIMG("画像A") x=G_IMG_X y=G_IMG_Y BTN(LEFT, CLICK, x, y, 300) endif X地点 //Bの画像があればクリック、無ければZ地点へ戻る ifb CHKIMG("画像B") x=G_IMG_X y=G_IMG_Y BTN(LEFT, CLICK, x, y, 300) endif wend という感じで…、状況によってプログラムの指定した行へ移動させたいのですが どうすれば良いのでしょうか? 上手く説明できなくてすみませんが、教えてください。 よろしくお願いします。

  • UWSCの繰り返しとその脱出について

    今、以下のようなプログラムをUWSで書きたいと思っています。 1.画像Aが画面上にあるか確認  ある場合:2へ  ない場合:ループを終了 2.画像Aがある場合、必ず数秒後に画像Bが定位置に出てくるので、画像Bをクリック 3.画像Bをクリックした場合  画像Cが定位置に出てきたら、画像Cをクリック  画像Cが出てこない場合は、1.へ戻る そこで、以下のようなスクリプト?を記載しましたが、「対応するIFBがない。10行目:ENDIF」と返されます。 ----------------------------- REPEAT SLEEP(0.1) UNTIL TRUE IFB(CHKIMG("A.bmp") = TRUE) THEN BTN(left,click,G_IMG_X,G_IMG_Y) SLEEP(1.5) BTN(left,click,1033,654) //画像Bの出てくる場所です IFB(CHKIMG("C.bmp") = TRUE) THEN BTN(LEFT, CLICK, 997, 675) //画像Cの出てくる場所です ENDIF ELSEIF BREAK ENDIF ----------------------------- ちなみに、画像Aは画面上に複数ある場合もあれば、一つもない場合もあり、出現数はランダムです。 複数ある場合は、全て画像Aクリック→画像Bクリックを行う必要があります(その際、画像Cが出てくれば、画像Cもクリックが必要になります)。 自分なりに調べてみたのですが、何分初心者なもので、なにがどう間違っているのかよく分かりません。 どなたかご教授頂けないでしょうか。宜しくお願いします。

  • UWSCのスクリプトについて

    日々のルーチンワークで退屈な作業をPC様にやっていただこうとUWSCの学習をしています。 以前は記録して使用したのですが不定期にマウス座標が変わるようになったため.UWSを書いてみてます。ど素人ですがやっと画像をファイルに格納して作業ができるまでになりました。 使用環境はwin7です。 質問内容ですが手間が多いのと説明がへたなのでプログラムより質問内容が理解できないほうが心配です。出来るだけ分っていただけるように頑張りますのでご教授お願いします。 画像A 画像B 画像C 以上がWEBブラウザ上に表示されたときに以下の作業をします。 オーダーフォームの利用規約同意[ボタン]、確認画像[ボタン]、購入画像[ボタン]を押下する。 どれが表示されてもオーダーフォームの作業が発生します。 ほかの質問で以下のような回答があったので参考にしたのですが繰り返し探してはくれるのですが オーダーフォームの作業を書くことができません。。 ≪転記≫ WHILE (TRUE) //WENDまで無限ループ IFB (CHKIMG("A.bmp")=TRUE) THEN CHKIMG("1.bmp") //「1」画像の座標を調べる BTN(LEFT, G_IMG_X, G_IMG_Y) ELSE IFB (CHKIMG("B.bmp")=TRUE) THEN CHKIMG("2.bmp") //「2」画像の座標を調べる BTN(LEFT, G_IMG_X, G_IMG_Y) ELSE ・・・以下略・・・ ENDIF WEND 自分でも頑張ってみますがご教授頂けると幸いです。 よろしくおねがいいたします。

専門家に質問してみよう