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.2
- 回答日時:
>webで文字を検索して、反転部分
にすることは、可能です。
しかし、その「座標」を取得するのは、ちょっと。。。
>~~~.Clickなどが使えません。
>Script生成リンク部分があり、
>SendKeys {enter},{SPACE}も効かず
どんな ページ なのか見てみたいものです。
「親会社のwebシステム」ということで、URL は晒せませんよねぇ。
「Script生成リンク部分」とお書きなのが、どのような「Script」なのかによっては、objIE でも アクセス 可能なはずです。
そもそも、hamaa_2009 さんが、どのようにして、その サイト の html を分析されているのでしょうか?
可能でしたら、
1)元々の ページ の ソース(URL 文字列は伏せていただいて結構です。)
2)クリック すべきトコロに表示されている「文字列」
をお知らせいただけるようでしたら、こちらで分析してみます。
No.3
- 回答日時:
hamaa_2009さん
はじめまして。
私も仕事で同じことを行いました。
IEを最大化して、クリックに位置に「SetCursorPos」で設定しマウス操作…
ただHTMLから位置を求めるのは不可能だと思います。
画面解像度、文字フォント等、様々な条件があるからです。
私が行ったのは、実際にクリックしたい所にカーソルを移動して、位置を求めることです。
Declare Function GetCursorPos Lib "user32.dll" (ByRef pos As POINTAPI) As Boolea
:
MsgBox ("クリックしたい位置にマウスを合わせてください")
Call GetCursorPos(point)
' 位置をシート等にメモ
あまりお役に立てないかも知れませんが、一つのアイデアとご検討ください。
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上に表示⇒エクセルが取得とか… ちょっと探ってみます。
本当にお二人さんありがとうございます。(^^
お探しの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(パワーポイント)
-
Webページ中の javascript をVBAから実行するには
Visual Basic(VBA)
-
-
4
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
5
別のアプリケーションのテキストフィールドに入力する方法
Visual Basic(VBA)
-
6
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
7
ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法
Visual Basic(VBA)
-
8
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
9
ExcelのVBAでHTMLのタグ数を取得するには
Excel(エクセル)
-
10
VBA IE ダウンロード ダイアログ制御(名前を付けて保存)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSファイルの編集?
-
C#で、画像の、指定した座標の...
-
エクセルVBAで画像を貼り付ける...
-
マルチディスプレイ環境のとき...
-
VBでデスクトップ上のアイコン...
-
uwscについて、同一の画像(仮...
-
UWSCで特定の文字をクリックす...
-
Unityでピクセル情報を取得する...
-
VCでの問題・・・
-
クリックした点を中止に拡大・縮小
-
ペイントの多ページに亘る情報...
-
自動運転の車線維持機能について
-
もしかして
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
CloseとDisposeの違い
-
VBAでループ内で使う変数名を可...
-
エクセルVBAで、MsgBox やInput...
-
Do~Loopした回数をカウントしたい
-
switch の範囲指定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで画像を貼り付ける...
-
Excel VBAで他アプリケーション...
-
C#で、画像の、指定した座標の...
-
外付ディスプレイで AutoHotkey...
-
uwscについて、同一の画像(仮...
-
VBでクリックイベントを発生さ...
-
UWSファイルの編集?
-
NoxPlayerとUWSCのadbの座標に...
-
VBAで ScreenToClient を使いたい
-
バナーにリンクを埋め込む方法
-
UWSCのCHKIMG関数について
-
マウスイベントが動かない
-
UWSC画像認識で座標の位置がず...
-
VBA HTML要素または文字の座標...
-
ピクチャーボックスのスケール...
-
画像の座標取得
-
LineTo,MoveToについて
-
puctureBoxの一部の色を変えた...
-
bitbltからの画像保存ができま...
-
マウスカーソルの移動
おすすめ情報