三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

社内Webシステムの 商品をクリックしたい。

                                            • -

> 最近ログインなど面倒なので何か自動化できる方法はないかなあ
>(あるのでしょうけど自分で手を出せるレベルのものなのか…)
>と思っていたところ、三流君さんのサイトを読んでいて、
>そのまま使えそうだと思ったので使わせていただきました。
>(VBAからIE起動のところです)
>
> おかげさまで無事に自動でID・パスワードを入力後、
>ログインするところまではでき喜んでおります。

 ・
 ・
 ・

> IE起動
> ↓
>ログイン処理
> ↓
>商品画像・バナーが貼ってある位置(複数箇所)を
>自動クリック
>
> みたいなことをしたいのですが、
>可能なのでしょうか?
> もしよろしければ御教示いただけたら嬉しいです。

 ・
 ・
 ・

> もちろん自動クリックのフリーソフトは多く存在してることは
>知っているのですが、余計なものはインストールしたくありませんし
>自分の目的以上のものは欲しくありません。
>自分で最低限の機能のものを作成したいなあと思ったのであえて調べたいと
>思いました。

          • ↑に対して 私の三流回答が↓ ----

こんにちは。
ログイン処理までできていて、あとは リンク先をクリックだと思うので。
'バカっぽいけどログイン後、
'1.クリックしたいページを表示する。
'2. リンク情報から、リンク先の文字を探し、クリックする。
'↑1と2を複数回繰り返す
そんな感じかなぁ。


Sub 商品クリック処理イメージ()

'まぁ、IE立ち上げて、ログインします。ここまでは、できていると仮定して、

'ログインする。
'ここまでは、できてると思うので。


'-- ここから
'念のため、ログイン後、ページの表示を待つ。
'表示終了まで待つ
Do While objIE.Busy = True Or objIE.ReadyState <> 4
'何もしないループ(笑)
DoEvents
Loop

'発注ページを表示する(発注商品のリンクがあるページを表示。)
objIE.Navigate "発注商品のリンクがあるページ。" '指定ページを表示
'また待つ、表示終了まで待つ
Do While objIE.Busy = True Or objIE.ReadyState <> 4
'何もしないループ(笑)
DoEvents
Loop

'リンクのアンカーオブジェクトをクリックする
Dim n As Integer
Dim objFDOC As Object 'ドキュメントを保存する
Set objFDOC = objIE.Document '代入別に代入しなくてもいいけど。

'リンク情報からオブジェクトを探し.Clickする
For n = 0 To objFDOC.Links.Length - 1 'リンク数分まわす
Debug.Print objFDOC.Links(n).href 'デバックで表示する
'リンク先(.InnerText)をチェックする(文字列比較する)
If Trim("" & objFDOC.Links(n).InnerTEXT) = "発注商品名" Then
objFDOC.Links(n).Click '.Clickでクリックしてみた
Exit For '見つかったので強制的にループを抜ける
End If
Next n

'次の終了まで待つ
Do While objIE.Busy = True Or objIE.ReadyState <> 4
'何もしないループ(笑)
DoEvents
Loop

'ページが変わったら、数量とか入れなくていいのかなぁ?画像クリックだけ?
'まぁ、このタイミングで、個別の商品に対して処理する。
'よくあるパターンが、数量をセットして.Submitで送信とか

'次の発注商品をクリックするページ
'次のグループを表示する(同じグループを複数回なら、前と同じかなぁ。)
objIE.Navigate "発注商品のリンクがあるページ。" '指定ページを表示
'また待つ、表示終了まで待つ
Do While objIE.Busy = True Or objIE.ReadyState <> 4
'何もしないループ(笑)
DoEvents
Loop

'リンクのアンカーオブジェクトをクリックする
Set objFDOC = objIE.Document '代入別に代入しなくてもいいけど。

'リンク情報からオブジェクトを探し.Clickする
For n = 0 To objFDOC.Links.Length - 1 'リンク数分まわす
Debug.Print objFDOC.Links(n).href 'デバックで表示する
'リンク先(.InnerText)をチェックする(文字列比較する)
If Trim("" & objFDOC.Links(n).InnerTEXT) = "次の発注商品を識別する文字" Then
objFDOC.Links(n).Click '.Clickでクリックしてみた
Exit For '見つかったので強制的にループを抜ける
End If
Next n

'次の終了まで待つ
Do While objIE.Busy = True Or objIE.ReadyState <> 4
'何もしないループ(笑)
DoEvents
Loop

'ページが変わったら、数量とか入れなくていいのかなぁ?画像クリックだけ?
'まぁ、このタイミングで、個別の商品に対して処理する。
'よくあるパターンが、数量をセットして.Submitで送信とか

'↑バカっぽいけどログイン後、
'1.クリックしたいページを表示する。
'2.リンク情報から、リンク先の文字を探し、クリックする。
'↑1と2を複数回 商品数 繰り返す


End Sub

ポイントはリンク情報を探す方法ですが、
If Trim("" & objFDOC.Links(n).InnerTEXT) = "発注商品"
と、リンクのアンカーテキストの文字で探してます。

あとは、よくある画像。商品イメージのクリックなら。
If Instr(objFDOC.Links(n).InnerHTML, "xxxx.gif") > 0 Then

If Instr(objFDOC.Links(n).InnerHTML, "xxxx.jpg") > 0 Then
と、商品画像を探したり、

クリックしたい、商品コード、識別IDなどがあるなら、
例えば、商品コードが SID=4649 なら
If Instr(objFDOC.Links(n).InnerHTML, "4649") > 0 Then 'HTML内に識別するコードがあるか?
と、発注商品のコードを探すのも手かもしれません。
※よく、URL/...cgi?SID=4649 とか、URLにパラメーターが付いているなら、
.InnerHTML から 探したり、.href 直接飛び先を見たり
If Instr(objFDOC.Links(n).href, "4649") > 0 Then '飛び先を見る

まずは、本番前に、
'リンクを探す
'リンク数分まわす A列にアンカーテキスト B列にURLを書く
nYLINE = 10 '10行目からせっとするので
For i = 0 To objIE.Document.Links.Length - 1
Cells(nYLINE, "A") = "'" & objIE.Document.Links(i).innerText 'テキスト
Cells(nYLINE, "B") = "'" & objIE.Document.Links(i).href 'URL
Cells(nYLINE, "C") = "'" & objIE.Document.Links(i).InnerHTML 'IMGなど中のHTML
nYLINE = nYLINE + 1 'セット位置を+1する
Next i
とかで、リンク情報を全て吐き出して、見てみるのも手かも。。。
リンクの探り方は
http://www.ken3.org/cgi-bin/group/vba_ie_link.asp
を見てください。

と、長々書きましたが、読み返すと、自分でも?な感じが。
なかなか、説明って、難しいですね。
※逆に このあたりを整理して HPに書くと 喜ばれるのかも?

私は、あまり掲示板のお偉いさんみたいに潔癖じゃないので、
社内Webシステムの自動クリック処理は迷惑だ 悪だ とか言わないので、
(他の掲示板だと、この手の質問出すと たたかれているのをたまに見て、
 なんかイヤな気分になりますが。)
※↑と書いてますが、一般的には、社内システムを構築した人に一言相談するのがすじですが。(だったら、掲示板の人が正解なのでは?気分が悪くなる三流君のほうがおかしいよね)

おっと、話がそれましたね。
処理のポイントは、ページを表示したら、
リンク情報を探して クリックする。
リンクの情報は、普通のテキストだったり、画像だったり、コード で探します。
って感じかなぁ。

何かの参考となれば、幸いです。 三流プログラマー Ken3

−−− ↑なんて、回答してました。自分メモでアップします。 −−−
※↑自分メモでBlogにアップとか言いつつ、Googleなどの検索に拾われるとうれしいなぁ(おぃぉぃ)

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)