如何从 javascript 生成的 TWebBrowser 中提取用户可见的 HTML
How to extract user-visible HTML from a TWebBrowser that's generated by javascript
我正在使用 Delphi 的 TWebBrowser 组件加载一些我想解析的网页,它们使用 javascript (AJAX?) 来呈现用户-可见 HTML 代码。从这些页面 return 中提取 HTML 的有据可查的方法是一堆 javascript 而不是用户看到的内容。这里有对查询的响应可以追溯到 2004 年,它们都是 return javascript 而不是用户可见的 HTML。我见过一些建议使用替代方法访问数据的方法,但我无法使它们中的任何一个工作,我也不确定如何调整代码。
我的问题是,当我将网页加载到在 TWebBrowser 组件内部渲染后完全可读的 TWebBrowser 时,我如何提取最终在该组件内部渲染的 HTML可见,而不是生成它的 JS 代码?
就我而言,我正在尝试加载 Google 搜索结果页面,但我听说这也是许多新闻网站(如华尔街日报、WAPO 和纽约时报)中的一个问题。
var
url: string;
d: OleVariant;
begin
// enter something like "dentist in baltimore" in a Google search,
// then copy the contents of the ADDRESS field that it generates and
// paste it here:
url := '... paste URL Google generates here ...';
WebBrowser1.Navigate2( url, 0 {nav_flags} );
// I have an OnNavigate2 handler here, but I'm guessing this works as well
d := WebBrowser1.Document;
memo1.Lines.Text := d.documentElement.outerHTML;
问题是,备忘录包含...而且它只是 HEAD 中的一堆 javascript。没有任何内容与此搜索实际向用户显示的 TWebBrowser 或浏览器 window 中的可见内容相似。
另一个论坛中有人建议这是一个时间问题,并用 OnDocumentComplete 替换我正在使用的 OnNavigationComplete2。实际上,我从未见过或听说过 OnDocumentComplete,也从未在任何示例中看到过它的使用。当然 none 已被简化为内联显示所有内容,因此不会出现时间问题。
但事实证明,这是本例中问题的症结所在,而不是 outerHTML:您需要调用一个在所有 javascript 完成 运行 后触发的事件,并且我相信 OnNavigationComplete2 做到了这一点。我的错。
我正在使用 Delphi 的 TWebBrowser 组件加载一些我想解析的网页,它们使用 javascript (AJAX?) 来呈现用户-可见 HTML 代码。从这些页面 return 中提取 HTML 的有据可查的方法是一堆 javascript 而不是用户看到的内容。这里有对查询的响应可以追溯到 2004 年,它们都是 return javascript 而不是用户可见的 HTML。我见过一些建议使用替代方法访问数据的方法,但我无法使它们中的任何一个工作,我也不确定如何调整代码。
我的问题是,当我将网页加载到在 TWebBrowser 组件内部渲染后完全可读的 TWebBrowser 时,我如何提取最终在该组件内部渲染的 HTML可见,而不是生成它的 JS 代码?
就我而言,我正在尝试加载 Google 搜索结果页面,但我听说这也是许多新闻网站(如华尔街日报、WAPO 和纽约时报)中的一个问题。
var
url: string;
d: OleVariant;
begin
// enter something like "dentist in baltimore" in a Google search,
// then copy the contents of the ADDRESS field that it generates and
// paste it here:
url := '... paste URL Google generates here ...';
WebBrowser1.Navigate2( url, 0 {nav_flags} );
// I have an OnNavigate2 handler here, but I'm guessing this works as well
d := WebBrowser1.Document;
memo1.Lines.Text := d.documentElement.outerHTML;
问题是,备忘录包含...而且它只是 HEAD 中的一堆 javascript。没有任何内容与此搜索实际向用户显示的 TWebBrowser 或浏览器 window 中的可见内容相似。
另一个论坛中有人建议这是一个时间问题,并用 OnDocumentComplete 替换我正在使用的 OnNavigationComplete2。实际上,我从未见过或听说过 OnDocumentComplete,也从未在任何示例中看到过它的使用。当然 none 已被简化为内联显示所有内容,因此不会出现时间问题。
但事实证明,这是本例中问题的症结所在,而不是 outerHTML:您需要调用一个在所有 javascript 完成 运行 后触发的事件,并且我相信 OnNavigationComplete2 做到了这一点。我的错。