我目前正在尝试通过 cURL 加载 HTML 页面。我可以检索 HTML 内容,但稍后会通过脚本 (AJAX POST) 加载部分内容。我无法恢复 HTML 部分(这是一张表格)。
是否可以完全加载页面?
谢谢您的回答
不,你不能这样做。
CURL 只不过是从 URL 下载文件——它不关心它是 HTML、Javascript、图像、电子表格还是任何其他任意数据;它只关心文件是否是 HTML、Javascript、图像、电子表格或任何其他任意数据;它只是下载。它不运行任何内容、解析任何内容或显示任何内容,它只是下载。
你所要求的远不止于此。您需要下载、将结果解析为 HTML,然后运行一些 Javascript 来下载其他内容,然后运行更多 Javascript 将结果解析为更多 HTML 并将其插入到原始 HTML 中。
您基本上需要的是一个成熟的网络浏览器,而不是 CURL。
由于您的目标涉及“运行一些 Javascript 代码”,因此很明显,如果没有可用的 Javascript 解释器,这是无法实现的。这意味着它显然无法在 PHP 程序中运行 (*)。您将需要超越 PHP。您将需要一个浏览器。
我建议的解决方案是使用一个非常专业的浏览器,称为PhantomJS。这实际上是一个完整的 Webkit 浏览器,但没有用户界面。它专为网站和其他类似任务的自动化测试而设计。您的要求非常适合:编写一个脚本让 PhantomJS 打开您的 URL,等待表格完成渲染,并获取完成的 HTML 代码。
您需要在服务器上安装 PhantomJS,然后使用像这样的库通过 PHP 代码控制它。
我希望这有帮助。
(*) 是的,我知道 PHP 扩展在 PHP 内部提供了 JS 解释器,并且它将提供一种解决问题的方法,但它是实验性的,未完成的,仍然很难作为解决方案实现,并且无论如何,我认为这不是一个特别好的主意,所以我们不要出于这个答案的目的考虑它。