如何从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参数调用url
和path
到phantomJS脚本system.args[1]
和system.args[2]
。任何想法如何做到这一点?
答
为什么不只是传递参数给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()
。
这是执行PhantomJS脚本的一种非常奇怪的方式。如果您使用Selenium的Java绑定,那么您确实应该使用它的API。如果你想从Java调用一个普通PhantomJS脚本,然后调用PhantomJS二进制与脚本的子进程。请不要混用两者,因为当这变得更复杂时,你几乎肯定会遇到问题。 –
你的意思是叫PhantomJS脚本像一个过程,而不是使用Ghostdriver的?我不太明白你在说什么“你真的应该使用它的API”。我没有这样做吗? – amarincolas
是的,我的意思是你应该使用'Runtime#exec'或类似的代码,而不是通过Ghostdriver在脚本中执行相同的脚本。如果你不限于脚本,那么你应该使用API,比如用'driver'打开一个页面并获取它的页面源代码。 –