【发布时间】:2015-04-18 17:52:53
【问题描述】:
这个https://www.npmjs.com/package/phantom#functionality-details 页面说:
您还可以通过为 phantom.create() 指定附加参数,将命令行开关传递给 phantomjs 进程,例如:
phantom.create '--load-images=no', '--local-to-remote-url-access=yes', (page) ->
或通过在 options* 对象中指定它们:
phantom.create {parameters: {'load-images': 'no', 'local-to-remote-url-access': 'yes'}}, (page) ->
这些示例仅在咖啡脚本中,并且它们暗示 create 函数可以使用
create('string',function)
或
create([object object],function)
但真正期望的第一个参数是函数!
我真的很想尝试http://phantomjs.org/api/command-line.html 我可能有错误的想法,但在我看来它们可以在创建函数中使用(就在你执行 createPage 之前),我错了吗?
我尝试了几件事,最合乎逻辑的一个是:
var phantom = require('phantom');
phantom.create(function(browser){
browser.createPage(function(page){
page.open('http://example.com/req.php', function() {
});},{parameters:{'proxy':'98.239.198.83:21320'}});});
所以页面被打开了。我知道这一点,因为我让 req.php 将 $_SERVER 对象保存到 txt 垫,但是 REMOTE_ADDR 和 REMOTE_PORT 标头不是我设置的代理中的标头。它们没有效果。我也试过:
{options:{'proxy':'98.239.198.83:21320'}}
文档称该对象为 options* 对象 *见上文^
和
'--proxy=98.239.198.83:21320'
我还对幻像模块进行了挖掘以找到创建功能。它不是用js写的我至少看不到它。它必须在 C++ 中。看起来这个模块已经更新了,但是模块深处的例子看起来像旧代码。
我该怎么做?
编辑:
var phantom = require('phantom');
phantom.create(function(browser){
browser.createPage(function(page){
browser.setProxy('98.239.198.83','21320','http', null, null, function(){
page.open(
'http://example.com/req.php', function() {
});});});});
这不会产生错误,页面会被抓取,但代理会被忽略。
【问题讨论】:
-
代理设置是在进程创建期间设置的,而不是在页面打开期间设置的。您是否真的尝试将字符串或对象作为第一个参数传递给
phantom.create?如何验证代理设置不起作用? -
将字符串作为 page.create 的第一个参数传递会产生错误(预期的函数),我尝试按照您的建议将其放在 phantom.create 上(在函数之前和之后尝试),没有错误但是它没有效果。我没有被视为在代理上
-
是socks5代理吗?
-
我认为它是来自us-proxy.org的http代理