从Google Chrome当前选项卡获取当前HTML

4

我想做的事情:
我希望从Google Chrome浏览器中获取当前标签页的HTML。
我不想这样做:
获取当前标签页的URL,然后使用webClient.DownloadString来获取HTML。(我已经这样做了)

对我来说,从Google Chrome而不是当前Google Chrome URL获取HTML非常重要。
我尝试过的方法:

WebKit.NET

WebKit.NET可以让我像Google Chrome一样浏览网址。
我想要“连接”到当前的Google Chrome窗口,然后进入当前标签页窗口,将当前标签页文档插入WebKit.DOM.Document中。

在另一个项目中,我使用了SHDocVw.ShellWindows(ShellWindows = 所有支持的窗口),SHDocVw让我获取当前Internet Explorer标签页的当前HTML。 例如:

    Dim shellWindows As New SHDocVw.ShellWindows
    For Each Ie As SHDocVw.InternetExplorer In shellWindows
            Dim htmlDoc As mshtml.HTMLDocument = Ie.Document
    Next


SHDocVw仅适用于Internet Explorer

我该如何在Chrome标签之间浏览,然后将HTML插入字符串列表中?
我怀疑答案在WebKit.Interop.dll中,但我对此库没有经验。

我相信有人有这个问题的解决方案,
标签窗口的类名是Chrome_RenderWidgetHostHWND(使用spy++),
我认为我不能从当前标签Handle获取HTML,
但也许我可以将句柄转换为WebKit.DOM.Document - 但我更喜欢检查第一个选项。

对我来说,以正确的方式和最好的方式完成项目非常重要。


你有没有找到这个问题的答案? - Michael Hoffmann
1个回答

0

我认为你必须使用WINAPI的GetWindow工作。在这里,您可以传递类名并获取当前窗口/进程的处理程序。我不确定直接是否可行,但是Google Chrome中的所有选项卡都在自己的线程中运行,因此我认为这是可能的。

Declare Function GetWindow Lib "user32.dll" Alias "GetWindow" ( ByVal hwnd As Long, ByVal wCmd  As Long) As Long
Declare Function SendMessage Lib "user32.dll" Alias "SendMessage" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Keys, ByVal lParam As Integer) As Long

这些是你需要的函数。然后,你可以使用第二个WINAPI SendMessage 向线程发送指令并从侧面获取HTML。我认为你必须获取选项卡内部HTML框架的类名。或者你可能需要再次调用GetWindow来获取HTML框架,我不知道Google Chrom的结构,但我认为使用spy++很容易获取它们的类名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接