如何从';由javascript生成的

如何从';由javascript生成的,javascript,html,delphi,twebbrowser,Javascript,Html,Delphi,Twebbrowser,我正在使用Delphi的TWebBrowser组件加载一些我想要解析的网页,它们使用javascript(AJAX?)呈现用户可见的HTML代码。从这些页面中提取HTML的文档化方法会返回一堆javascript,而不是用户看到的内容。这里对查询的响应可以追溯到2004年,它们都返回javascript,而不是用户可见的HTML。我见过一些人提出了访问数据的替代方法,但我无法让它们中的任何一个正常工作,也不知道如何修改代码 我的问题是,当我将一个网页加载到TWebBrowser中,在TWebBr

我正在使用Delphi的TWebBrowser组件加载一些我想要解析的网页,它们使用javascript(AJAX?)呈现用户可见的HTML代码。从这些页面中提取HTML的文档化方法会返回一堆javascript,而不是用户看到的内容。这里对查询的响应可以追溯到2004年,它们都返回javascript,而不是用户可见的HTML。我见过一些人提出了访问数据的替代方法,但我无法让它们中的任何一个正常工作,也不知道如何修改代码

我的问题是,当我将一个网页加载到TWebBrowser中,在TWebBrowser组件内部呈现后,该网页完全可读时,我如何提取最终在该组件内部呈现的HTML以使其可见,而不是提取生成它的JS代码

在我的例子中,我试图加载一个谷歌搜索结果页面,但我听说这也是许多新闻网站,如《华尔街日报》、《华盛顿邮报》和《纽约时报》的一个问题

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;

问题是,备忘录包含。。。这只是头脑中的一堆javascript。没有任何东西与此搜索实际显示给用户的TWebBrowser或浏览器窗口中的可见内容相似。

另一个论坛中有人建议这是一个时间问题,并将我使用的OnNavigationComplete2替换为OnDocumentComplete。实际上,我从未见过或听说过OnDocumentComplete,也没有在任何示例中使用过它。当然,没有一个已经被简化为以内联方式显示所有内容,因此不会出现时间问题


但事实证明,这是本例中问题的症结所在,而不是outerHTML:您需要调用在所有javascript运行完毕后触发的事件,我相信OnNavigationComplete2做到了这一点。我的错。

请参见:也不要废弃谷歌搜索页面该页面上的内容(第一条评论)今天不起作用。我已经尝试了这两个建议,我得到的只是一堆javascript代码。甚至从下面的建议中也可以看出,要抓住outerHTML。这是从2014年开始的。它可能一直有效到2018年的去年秋天,但在2019年年中的今天就不起作用了。@TomBrunberg我请求你在这种情况下,真的尝试复制我解释的内容,并看看结果。打开google.com的浏览器窗口,输入类似“巴尔的摩牙医”的内容。然后从地址栏复制URL,并将其用作WebBrowser1.Navigate2(_URL,0)中的URL;提取outerHTML,并告诉我它与此查询的TWebBrowser视口中可见的内容有何关联。我没有看到用户看到的任何内容。也许你会明白我所指的问题。你把它解决了,这对你很好。这是一个典型的例子,说明了为什么提供一个完整的示例非常重要,我听到了,但我不会在示例中包括OnNavigationComplete2处理程序。幸运的是,有人根据我的评论想到了这一点。但是,我一直使用该处理程序从网站或搜索查询中提取和处理数据。我想我们在网站页面制作中看到了一个新的复杂程度,这在以前是不存在的,并且会导致意外的时间/处理问题。很高兴知道。谢谢你的支持。