2014-10-27 50 views
4

我正在使用Selenium和PhantomJs来抓取网址。我初始化驱动程序如下以PhantomJS开始的RemoteWebdriver无法打开https url

final DesiredCapabilities caps = DesiredCapabilities.chrome(); 
caps.setCapability(
     PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, 
     "PhantomJsPath"); 
caps.setCapability("page.settings.loadImages", false); 
caps.setCapability("trustAllSSLCertificates", true); 

RemoteWebDriver driver = new PhantomJSDriver(caps); 
driver.setLogLevel(Level.OFF); 
driver.get("https://.......") 

的pagesource从驱动器获得空

我错过了什么?

+0

硒对于网页抓取来说是一个糟糕的选择。你看过curl或httpbuilder之类的东西吗? – SiKing 2014-10-27 22:00:32

+0

我需要提交表单并执行Javascript更改。所以我更喜欢Selenium。你可以找到工作,以抓取https网址。我认为我要刮的URL有一些未知的证书,因此它不是刮。我们必须设置参数来忽略SSL参数。我无法得到正确的参数 – Babu 2014-10-28 03:24:17

回答

7

最近POODLE的漏洞迫使网站去掉SSLv3支持。由于PhantomJS < v1.9.8默认使用SSLv3,因此无法加载页面。要解决此问题,您需要运行--ssl-protocol=tlsv1--ssl-protocol=any的PhantomJS。有关普通PhantomJS,请参见this answer

caps = DesiredCapabilities.phantomjs(); // or new DesiredCapabilities(); 
caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, 
     new String[] {"--ssl-protocol=tlsv1"}); 
// other capabilities 
driver = new PhantomJSDriver(caps); 

如果不解决这个问题,你还可以添加

"--web-security=false", "--ignore-ssl-errors=true" 

到CLI args来String数组作为SiKing的答案here看到。

+0

--ssl-protocol = tlsv1适合我。我试着用后者,但不起作用 – Babu 2014-10-28 10:23:59