我正在使用Delphi10。
我尝试获取该网站的内容:leforem.be。我尝试使用WebBrowser控件,但无法获取页面上脚本生成的完整源代码。有人有主意吗?
PLink := 'https://www.leforem.be/recherche-offres-emploi/jsp/index.jsp#searchurl-results/1?query=&lieu_trav='
MyBrowser.Navigate(PLink, 4);
{Wait for Browser Ready Status}
while MyBrowser.ReadyState <> 4 do Application.ProcessMessages;
StartTime := Now;
{Wait for anoyther 60 seconds}
while SecondsBetween(Now, StartTime) < 60 do Application.ProcessMessages;
{Get the content of the Browser}
document := MyBrowser.Document as IHTMLDocument2;
PBrut := document.body.innerHTML;
答案 0 :(得分:1)
最简单的答案是:没有all scripts completed
事件,因此是不可能的。
但是,如果您要寻找solution
而不是简短的not possible
,请考虑以下事项:
Indy TIdHTTP根本不处理JS脚本,因此不应该这样做。它的功能是执行(GET,POST等)HTTP请求。
相反,浏览器具有内置的JS引擎来处理客户端脚本。问题在于它们即使连续停顿也可以连续良好地运行。浏览器只有DOM
is loaded
事件。许多网站已将代码附加到此事件中,以执行以后的JS代码。
DOM is ready
事件发生后,大多数网站都运行一系列DOM转换客户端脚本,在这之后,我们可能会以某种方式考虑,该页面已准备好供真实的人类用户阅读或网页抓取工具。
要了解这种状态,可以考虑以下几种方法:
B := CreateOleObject('InternetExplorer.Application');
具有Busy和ReadyState属性。您可能会检查一段时间是否不忙,请认为它已完成。考虑到这一点,您可以定义自己的函数NavigateAndWaitComplete(URL, [Element], Timeout)
来发挥作用。
答案 1 :(得分:0)
最后,我找到了解决方案。 Delphi使用IE7仿真。不得不将WebBrowser组件调整为IE11,并且工作正常。