No.1ベストアンサー
- 回答日時:
「画面の座標を取得し」てどうされるおつもりでしょうか?
例えば、ご覧の ページ の「左から○○ピクセル、上から○○ピクセル」の「がんばろう日本!」の アイコン でも クリック されるおつもりでしょうか?
そのような操作もできないことはないのでしょうが、普通は、「キーボードやマウスの操作を記録する」フリーソフト や「WEB操作を記録する」フリーソフト に頼るのが無難かと存じます。
普通、この種のご質問の場合は、大概、「htmlタグ の中に "<table>" がたくさんあるのだが、上から7番目の <table> の左から2番目の <td> の中身を取りたい」というような内容ですが、どうでしょうか?
あるいは、WEB画面でのログイン操作などでしょうか。
------------------------------------
例えば、リンク先 の URL は分かるのだけれども、[navigate メソッド] で直接、当該URL を呼び出すと、エラー になるので、どうしても、画面上の画像を クリック しなければならない、というような場合でしたら、下記のようになります。
ちなみに、下記は、この ページ の hamaa_2009 さんの上にある「がんばろう日本!」の アイコン を クリック する マクロ です。
Sub こんな感じ()
Dim strURL As String
Dim objIE As Object
Dim myLnk
strURL = "http://oshiete.goo.ne.jp/qa/6923883.html"
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.navigate strURL
While .Busy Or .ReadyState <> 4: DoEvents: Wend
.Visible = True
For Each myLnk In .Document.Links
If myLnk.href Like "*/profile/u1396884.html" Then
myLnk.Click
While .Busy Or .ReadyState <> 4: DoEvents: Wend
Exit For
End If
Next myLnk
End With
Set objIE = Nothing
End Sub
------------------------------------
他にも htmlタグ名 で データ を取りたい、というような場合でしたら
objIE.Document.getElementsByTagName("table")
というようなことで、当該ページ にある <table> タグ の一覧を取得できますので、その中の要素を調べて
objIE.Document.getElementsByTagName("table")(4).innerHTML
というような指定で文字列を取得します。
「(4).innerHTML」の中の「(4)」の インデックス に付きましては、上記マクロ の中の
For Each myLnk In .Document.Links
の部分のように「For ~ Next」で回さなければ分かりません。
また「innerHTML」の部分は、VBE(Visual Basic Editor)で「objIE.Document」を ウォッチ式 に追加し、ステップ イン デバッグ しながら、その配下の プロパティ などの「値」を確認して、「innerHTML」が良いのか、それとも「innerText」・「outerHTML」・「outerText」が良いのかなどを決めていきます。
いずれにいたしましても、WEBページ の作りは、サイト によって全然違いますし、同じサイトでも、ガラッと更新する場合も多々ありますので、1度書いた マクロ がいつまでも通用するかどうかは判りません。
------------------------------------
[getElementsByTagName メソッド] の他には、[getElementById メソッド]・[getElementsByName メソッド] などがあり、当該WEBページ の構成に応じて、使い分けます。
この回答への補足
DOUGLAS コードまで書いていただきありがとうございます。
現在、親会社のwebシステムに自動入力するツールを上司から言われつくっています。
親会社は別な会社に依頼してwebシステムをつくったのでセキュリティ処理がされているのか
objIE.Document.Links.Click
objIE.Document.forms(0).Click
objIE.Document.all.[名前].Clickなどが使えません。
しかたないので SendKeys {enter},{TAB}などを使っていましたが
Script生成リンク部分があり、SendKeys {enter},{SPACE}も効かず
-----------------------------------------------
Option Explicit
Declare Function SetCursorPos Lib "USER32" (ByVal x As Long, ByVal y As Long) As Long
Declare Sub mouse_event Lib "USER32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Type POINTAPI
x As Long
y As Long
End Type
Private Sub クリックテスト()
Call SetCursorPos(目標座標, 目標座標)
Sleep 400
Call mouse_event(&H2, 0, 0, 0, 0) 'ダウン
Call mouse_event(&H4, 0, 0, 0, 0) 'アップ
End Sub
-----------------------------------------------
これを使うざるをえません。
フリーソフトも使うことが許されておりませんので、BVAでやるしかありません。
webシステムは親会社のシステムで頻繁に変わることはないです。
あとは座標をとるだけなんですが、
画面の解像度、画面は最大化して使う、文字サイズは全員統一でやらせる予定です。
ですので
Script生成部分で、目標の文字列などのスクリーン座標などを取得してクリックさせたいのです。
webで文字を検索して、反転部分の座標とかでもいいんですが…
難しいものでしょうね。
沢山の説明ありがとうございます。
No.4
- 回答日時:
#2 >しかし、その「座標」を取得するのは、ちょっと。
。。WEBページ をいろいろと サーフィン して、[GetClassName 関数]・[GetCaretPos 関数]・[ClientToScreen 関数]・[GetCurrentThreadId 関数]・[GetWindowThreadProcessId 関数]・[AttachThreadInput 関数]・[SetForegroundWindow 関数]・[GetFocus 関数]・[GetGUIThreadInfo 関数]・[GetMessage 関数] などの [Win32API関数] を用いてどうにかならないかと模索いたしましたが、私の手には負えません。
キャレット 位置の座標を取得しようかと試みましたが、(IE の場合は)見当違いな座標が返ってきますし、フォーカスのある ウィンドウ ハンドル の ThreadID を代入しても ポジション が「0」になります。「IMR_QUERYCHARPOSITION」を キーワード に メッセージ のやりとりを試みるのですが、こちらは、さっぱり解りません。
ということで、
>>webで文字を検索して、反転部分
>にすることは、可能です。
と書きましたのは、下記のようなことですが、「Yahoo! JAPAN」の ホームページ を開き、画面右上の「カテゴリ一覧」を検索結果として、[ENTER] キー により開きます。
Sub webで文字を検索()
Const OLECMDEXECOPT_DODEFAULT = &H0
Const OLECMDID_FIND = &H20
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Visible = True
.navigate "http://www.yahoo.co.jp/"
While .Busy Or .ReadyState <> 4: DoEvents: Wend
.ExecWB OLECMDID_FIND, OLECMDEXECOPT_DODEFAULT
Sleep 400
SendKeys "カテゴリ一覧{ENTER}{ESC}{ENTER}"
End With
Set objIE = Nothing
End Sub
この回答への補足
DOUGLASさん
jcctaira さんイロイロありがとうございます。
お二人のアイディアなど表示していただいた単語で私も調べてみましたが、
まだ解決していません。
ちょっと質問のカテゴリから外れちゃいますが…
javaScriptは詳しくありませんがjavaScriptで出来ないか…も探っております。
エクセル⇒自分のjavaScriptで対象webの文字座標とれないか…
⇒自分のweb上に表示⇒エクセルが取得とか… ちょっと探ってみます。
本当にお二人さんありがとうございます。(^^
No.3
- 回答日時:
hamaa_2009さん
はじめまして。
私も仕事で同じことを行いました。
IEを最大化して、クリックに位置に「SetCursorPos」で設定しマウス操作…
ただHTMLから位置を求めるのは不可能だと思います。
画面解像度、文字フォント等、様々な条件があるからです。
私が行ったのは、実際にクリックしたい所にカーソルを移動して、位置を求めることです。
Declare Function GetCursorPos Lib "user32.dll" (ByRef pos As POINTAPI) As Boolea
:
MsgBox ("クリックしたい位置にマウスを合わせてください")
Call GetCursorPos(point)
' 位置をシート等にメモ
あまりお役に立てないかも知れませんが、一つのアイデアとご検討ください。
No.2
- 回答日時:
>webで文字を検索して、反転部分
にすることは、可能です。
しかし、その「座標」を取得するのは、ちょっと。。。
>~~~.Clickなどが使えません。
>Script生成リンク部分があり、
>SendKeys {enter},{SPACE}も効かず
どんな ページ なのか見てみたいものです。
「親会社のwebシステム」ということで、URL は晒せませんよねぇ。
「Script生成リンク部分」とお書きなのが、どのような「Script」なのかによっては、objIE でも アクセス 可能なはずです。
そもそも、hamaa_2009 さんが、どのようにして、その サイト の html を分析されているのでしょうか?
可能でしたら、
1)元々の ページ の ソース(URL 文字列は伏せていただいて結構です。)
2)クリック すべきトコロに表示されている「文字列」
をお知らせいただけるようでしたら、こちらで分析してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- その他(プログラミング・Web制作) pythonでのカーソル移動がずれる 2 2023/07/30 08:51
- Visual Basic(VBA) WordのVBAについて 5 2023/01/11 14:38
- Visual Basic(VBA) Vba 配列の中の特定文字列の位置の調べ方 9 2022/05/23 17:46
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Excel(エクセル) VBAで、㉑という数値が、正しく、入力できない 2 2022/07/26 20:22
- Visual Basic(VBA) vba 15 2023/04/07 12:33
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
【VBA/HTML】特定のタグ要素にマウスポインタを移動したい
Visual Basic(VBA)
-
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
VBA IE ダウンロード ダイアログ制御(名前を付けて保存)
Visual Basic(VBA)
-
-
4
Webページ中の javascript をVBAから実行するには
Visual Basic(VBA)
-
5
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
6
別のアプリケーションのテキストフィールドに入力する方法
Visual Basic(VBA)
-
7
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
8
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
9
ExcelのVBAでHTMLのタグ数を取得するには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外付ディスプレイで AutoHotkey...
-
エクセルVBAで画像を貼り付ける...
-
C#で、画像の、指定した座標の...
-
Windows、自作の画像生データを...
-
画像の座標取得
-
マウスイベントが動かない
-
VBでクリックイベントを発生さ...
-
uwscについて、同一の画像(仮...
-
高さのあるクォータービューの...
-
Windows APIの線などの描画につ...
-
コントロール名とそのプロパテ...
-
VBでプリンター制御コードを記...
-
正確なサイズの図形を印刷させ...
-
HSP 自機狙い
-
マウス自動クリックソフトについて
-
VBで路線図(画像)の駅名をク...
-
UWSC画像認識で座標の位置がず...
-
Excel VBAで他アプリケーション...
-
「ご処理進めて頂きますようお...
-
【Excel】特定の文字を含むセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで画像を貼り付ける...
-
Excel VBAで他アプリケーション...
-
C#で、画像の、指定した座標の...
-
VBでクリックイベントを発生さ...
-
外付ディスプレイで AutoHotkey...
-
マウスイベントが動かない
-
VBAで ScreenToClient を使いたい
-
バナーにリンクを埋め込む方法
-
NoxPlayerとUWSCのadbの座標に...
-
UWSC画像認識で座標の位置がず...
-
VBでデスクトップ上のアイコン...
-
UWSファイルの編集?
-
UWSCのCHKIMG関数について
-
画像中のある座標でマウスオー...
-
VBA HTML要素または文字の座標...
-
JPGの画像ファイルの結合
-
マウスストーカーのようにカー...
-
Unityでピクセル情報を取得する...
-
マウス位置の色を得る
-
uwscについて、同一の画像(仮...
おすすめ情報