如何从Selenium/Ghostdriver将参数传递给PhantomJS脚本

问题描述:

如何执行下载网页(args [1])的phantomJS脚本并将结果html保存到文件(args [2])中,如下所示:如何从Selenium/Ghostdriver将参数传递给PhantomJS脚本

var system = require('system'); 
var page = require('webpage').create(); 
var fs = require('fs'); 

// Set the url address and the path 
var url = system.args[1]; 
var path = system.args[2]; 

page.open(url, function() { 
    fs.write(path, page.content, 'w'); 
    phantom.exit(); 
}); 

我使用selenium/ghostdriver如下执行脚本:

DesiredCapabilities cap = new DesiredCapabilities(); 
cap.setJavascriptEnabled(true); 
cap.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,".../phantomjs"); 

String [] phantomJsArgs = {url,path}; 
cap.setCapability(PhantomJSDriverService.PHANTOMJS_GHOSTDRIVER_CLI_ARGS, phantomJsArgs); 

PhantomJSDriver driver = new PhantomJSDriver(cap);   
String content = new String(Files.readAllBytes(Paths.get(scriptPath)),Charset.forName("UTF-8")); 
driver.executePhantomJS(content); 

此代码的工作除了当我试图通过从selenium/ghostdriver 2参数调用urlpath到phantomJS脚本system.args[1]system.args[2]。任何想法如何做到这一点?

+0

这是执行PhantomJS脚本的一种非常奇怪的方式。如果您使用Selenium的Java绑定,那么您确实应该使用它的API。如果你想从Java调用一个普通PhantomJS脚本,然后调用PhantomJS二进制与脚本的子进程。请不要混用两者,因为当这变得更复杂时,你几乎肯定会遇到问题。 –

+0

你的意思是叫PhantomJS脚本像一个过程,而不是使用Ghostdriver的?我不太明白你在说什么“你真的应该使用它的API”。我没有这样做吗? – amarincolas

+1

是的,我的意思是你应该使用'Runtime#exec'或类似的代码,而不是通过Ghostdriver在脚本中执行相同的脚本。如果你不限于脚本,那么你应该使用API​​,比如用'driver'打开一个页面并获取它的页面源代码。 –

为什么不只是传递参数给executePhantomJS方法?

driver.executePhantomJS(content, url, path); 
+0

使用你说的在脚本中给出以下参数:'main.js, - ip =, - port = 36863, - logFile = phantomjsdriver.log, - logColor = false, - logLevel = INFO'。没有url arg或路径arg。 – amarincolas

我做了什么来解决这个问题是不是传递了2个参数作为自变量(我们不是在命令行)的,我所做的是编辑文件作为一个字符串,并取代那些值两个变量与String.replace()