tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^7: Webページ内の文字取得につきまして
投稿日: 2017/12/19(Tue) 20:51
投稿者魔界の仮面弁士
> IE・Web以外のブラウザー(Google Chrome、Mozilla Firefox、Opera ・・・)でも

セキュリティ上の都合で、ほとんどのブラウザーは意図的に、
外部プログラムから制御可能なインターフェイスが設けられていないと聞いています。

なので、ユーザー操作のエミュレーションや UI Automation で凌ぐしか無いでしょう。
(Web データのスクレイピングだけなら、HTTP の通信内容を読み取るという手もありますが)

外部からの制御ではなくブラウザ自体の機能ということであれば、
[F12]キーなどからの開発者用ツールのコンソールから
DOM による範囲選択が可能です。この場合、選択範囲の仕様としては
 (1) W3C Range + Mozilla Selection
 (2) Microsoft TextRange
の 2 種類があります。(それが今回の要件には合うかどうかは別として)

大抵のブラウザは前者をサポートしているはずですが、IE6 は後者しか使えません。
といっても、IE8 未満はそもそも開発者ツールを装備していないのですけれども。


> プログラム起動でマウスポンターの移動中およびクリック中にマウスを手動で動かすと重なり影響を受け正常でない時がありました。
マウス操作だけでなく、キーボード操作(Ctrl + A や Ctrl + C)もあるので、
今の仕様ではいずれにせよ、ユーザー操作による割り込みには弱いですね。

ユーザーがクリップボード操作した場合や、
タッチ操作やペン入力の割り込みもありえるかも。


> mouse_eventでクリックする以上、
mouse_event は 1 回分の指定しか行えないので、
移動からのクリックやドラッグなどといった連続リクエストの場合は、
それらをまとめて送出可能な SendInput の方が良いかもしれません。


> 手動中のマウスに影響を受けなくするのは不可能と考えてよいでしょうか。
クリックを無視させたり、カーソル移動可能範囲を制限することならできるのですが、
エミュレーションの方も制限されてしまうことになるので、あまり意味は無さそうです。
http://hanatyan.sakura.ne.jp/vb6/mouse03.htm


> Webページ内をクリックしないで座標位置で範囲選択できますと
マウス操作無しとなると、UI Automation / MSAA ぐらいかと想像します。
(あとは先述の DOM 操作ぐらい)
https://www.ka-net.org/blog/?p=4628
https://msdn.microsoft.com/en-us/library/windows/desktop/hh707386.aspx


この場合 Chrome では、chrome://accessibility の画面から、
HTML 要素まで辿れるようモード設定する必要があります。

Opera や Firefox は普段使っていないため、
どこまでサポートされているか把握していません。
Firefox はサポートしていそうな印象を持っていますが…実際どうでしょうね。

サポート状況は、Inspectツールで調査できます。
http://www.atmarkit.co.jp/ait/articles/1404/03/news004.html


ただし座標指定という点が中々厄介です。

UIAutomationClient を参照設定して見てみると、
CUIAutomation オブジェクトの ElementFromPoint メソッドでは、
引数が ByVal pt As tagPOINT になっていました。
VB6 は、ユーザー定義型の値渡しを認めていませんので、
このメソッドは VB6 から直接呼び出すことができないはずです。

ElementFromPoint を利用可能な言語を経由するとか、
低レベル COM API で無理矢理呼び出す…という手を考えましたが
難易度が跳ね上がるので、あまり現実的ではなさそうです。
ウィンドウの子孫要素をナビゲートして、各要素の座標を
調査して回ることは出来るかもしれませんが、この場合は
実行効率が問題になりそう。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。