Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP中的phatomjs在下载页面上执行Javascript?_Php_Javascript_Phantomjs - Fatal编程技术网

如何使用PHP中的phatomjs在下载页面上执行Javascript?

如何使用PHP中的phatomjs在下载页面上执行Javascript?,php,javascript,phantomjs,Php,Javascript,Phantomjs,我在一个“自动浏览”的脚本中工作。我的脚本应该能够下载某些页面,然后解析这些页面以查找某些值,从而生成输出。服务器也需要身份验证 我已经能够使用PHP中的CURL lib获得这些页面,包括身份验证部分,但问题是这些页面的内容是在javascript函数中生成的,所以在使用CURL函数下载它们之后,大部分内容都丢失了,因为JS代码没有执行 所以,我需要的是执行JS后的DOM。我花了一些时间来找出解决这个问题的最佳方法,但我不确定是否找到了。不管怎么说,它对我还不起作用,所以 我所做的是在我的Lin

我在一个“自动浏览”的脚本中工作。我的脚本应该能够下载某些页面,然后解析这些页面以查找某些值,从而生成输出。服务器也需要身份验证

我已经能够使用PHP中的CURL lib获得这些页面,包括身份验证部分,但问题是这些页面的内容是在javascript函数中生成的,所以在使用CURL函数下载它们之后,大部分内容都丢失了,因为JS代码没有执行

所以,我需要的是执行JS后的DOM。我花了一些时间来找出解决这个问题的最佳方法,但我不确定是否找到了。不管怎么说,它对我还不起作用,所以

我所做的是在我的Linux机器上安装phantomjs,并尝试使用它来执行下载页面中的JS代码。因此,我使用CURL下载页面并将其保存为“test.html”文件,然后执行“phantomjs test.html”,但我得到的只是以下内容:

$ phantomjs test.html 
undefined:1 SyntaxError: Parse error
它什么也没做,就像被吊死一样

html在脚本标记中同时包含html和JS代码,就像其他常见的JS网页一样

无论如何,为了确保test.html没有问题,我用wget下载了google.com的index.html页面,得到了相同的结果:

$ phantomjs index.html 
undefined:1 SyntaxError: Parse error
所以我断定我一定是做错了什么

欢迎任何帮助。:-)


最好,

之所以
phantomjs index.html
不起作用,是因为传递到phantomjs的第一个参数是希望执行的phantomjs脚本,而不是html文件。我建议使用phantomjs直接打开网页,而不是将html文件传递给它。有相当多的例子说明了如何做到这一点,甚至可以看看的主页上的一个。有关更高级的功能,请参阅。如果您有任何更具体的问题,请在此处提问。

原因是
phantomjs index.html
不起作用,因为您传递到phantomjs的第一个参数是您希望执行的phantomjs脚本,而不是html文件。我建议使用phantomjs直接打开网页,而不是将html文件传递给它。有相当多的例子说明了如何做到这一点,甚至可以看看的主页上的一个。有关更高级的功能,请参阅。如果您有任何更具体的问题,请在此处提问。

我需要在每个HTTP服务器请求中发送一些标题,以执行身份验证,从而获得需要解析的每个页面,这就是我在下载页面之前下载该页面的原因,而不是将URL传递给phantomjs。@Fran-phantomjs还允许您修改标题,您可以将它们传递到phantomjs脚本中,因为paramsWill将尽快查看该脚本。不管怎样,我正在考虑放弃这项计划,它所花费的时间和精力对我来说太多了。你可能是对的。另一方面,我使用PhantomJS来抓取网页为自己节省了大量时间,因为它使操作和遍历domI变得非常容易。我需要在每个HTTP服务器请求中发送一些头来执行身份验证,以获取我需要解析的每个页面,这就是我之前下载页面而不是将URL传递给phantomjs的原因。@Fran-phantomjs还允许您修改标题,您可以将这些标题传递到phantomjs脚本中,因为paramsWill会尽快查看这些标题。不管怎样,我正在考虑放弃这项计划,它所花费的时间和精力对我来说太多了。你可能是对的。另一方面,我使用PhantomJS来抓取网页为自己节省了大量时间,因为它使操作和遍历dom变得非常容易