2016-02-02 2 views
0

Пытается использовать PhantomJS (com.codeborne: phantomjsdriver: 1.2.1) для некоторых тестов безгласного браузера вместе с прокси-сервером BrowserMob (browserermob-proxy-2.0-beta -9) для захвата файлов HAR и выполнения Javascript.browserMob proxy с phantomjs throws «java.net.UnknownHostException» для http-протокола

Он работает для URL-адресов с https (например, https://www.google.com), и я получаю HAR.
Однако для HTTP (например. http://www.google.com) я получаю следующее сообщение об ошибке в BrowserMob журналах

INFO 02/02 22:45:03 n.l.b.p.j.h.HttpSer~ - Version Jetty/5.1.x 
INFO 02/02 22:45:03 n.l.b.p.j.u.Contain~ - Started HttpContext[/,/] 
... 
INFO 02/02 22:46:29 n.l.b.p.h.BrowserMo~ - java.net.UnknownHostException: www.google.com when requesting http://www.google.com/ 
INFO 02/02 22:46:54 n.l.b.p.j.u.Threade~ - Stopping Acceptor ServerSocket[addr=/0.0.0.0,localport=13000] 
... 

После как я PhantomJS установки

public RemoteWebDriver getDriverInstance() { 
    DesiredCapabilities capabilities = new DesiredCapabilities(); 
    capabilities.setJavascriptEnabled(true); 

    //code to get Proxy is below 
    capabilities.setCapability(CapabilityType.PROXY, getProxyObject()); 

    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "./bin/phantomjs"); 
    capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); 
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, new String[] {"--web-security=no", "--ssl-protocol=any", "--ignore-ssl-errors=yes"}); 

    WebDriver webDriver = new PhantomJSDriver(capabilities); 
    return (RemoteWebDriver) webDriver; 
} 

public Proxy getProxyObject() { 
    Proxy proxy = new Proxy(); 

    //publicIp is localhost for testing purposes. 
    String proxyLocation = this.getPublicIp() + ":" + this.getBrowserMobProxyPort(); 

    proxy.setHttpProxy(proxyLocation); 
    proxy.setFtpProxy(proxyLocation); 
    proxy.setSslProxy(proxyLocation); 
    return proxy; 
} 

Все еще ищет решение.
Можно ли ожидать таких сообщений от BrowserMob?

Я, скорее всего, не настроил что-то правильно или пропустил часть. Было бы здорово, если бы кто-нибудь, кто столкнулся с этой проблемой, помог мне или указал на решение. Я сделал некоторые поиски, но не нашел решение, которое разрешает это.

Также, если есть дополнительная информация, пожалуйста, дайте мне знать.

ответ

0

Я использую новую версию BrowserMob Proxy, но следующий код Scala работает для меня при загрузке HTTP и HTTPS сайтов:

import java.io.File 

import net.anthavio.phanbedder.Phanbedder 
import net.lightbody.bmp.BrowserMobProxyServer 
import net.lightbody.bmp.client.ClientUtil 
import net.lightbody.bmp.core.har.HarEntry 
import org.apache.commons.io.FileUtils 
import org.openqa.selenium.OutputType 
import org.openqa.selenium.phantomjs.PhantomJSDriver 
import org.openqa.selenium.phantomjs.PhantomJSDriverService._ 
import org.openqa.selenium.remote.{CapabilityType, DesiredCapabilities} 

import scala.collection.JavaConversions._ 

object PhantomJSTest { 
    def main(args: Array[String]) { 
    val bm = new BrowserMobProxyServer 
    bm.start(0) 

    val proxy = ClientUtil.createSeleniumProxy(bm) 

    val phantomjs = Phanbedder.unpack() 
    val capabilities = new DesiredCapabilities 
    capabilities.setCapability(CapabilityType.PROXY, proxy) 
    capabilities.setCapability(PHANTOMJS_EXECUTABLE_PATH_PROPERTY, 
           phantomjs.getAbsolutePath()) 
    capabilities.setCapability(PHANTOMJS_CLI_ARGS, 
     Array[String]("--web-security=no", 
        "--ssl-protocol=any", 
        "--ignore-ssl-errors=yes")) 

    val driver = new PhantomJSDriver(capabilities) 

    run(bm, driver, "http://www.google.com") 
    run(bm, driver, "https://www.google.com") 

    driver.quit 
    bm.stop 
    } 

    def run(bm: BrowserMobProxyServer, driver: PhantomJSDriver, url: String) { 
    bm.newHar(url) 
    driver.get(url) 

    val har = bm.getHar 
    har.getLog.getEntries.foreach { e: HarEntry => 
     println(e.getRequest.getUrl) 
    } 

    val file = new File(s"screenshot-${System.currentTimeMillis}.png") 
    FileUtils.copyFile(driver.getScreenshotAs(OutputType.FILE), file) 
    println(s"Captured loading of ${url} screenshot to ${file.getCanonicalPath}") 
    } 
} 

Вот библиотеки, которые я использую (из моего build.gradle файла):

compile 'commons-io:commons-io:2.4' 
compile 'org.slf4j:slf4j-simple:1.7.16' 
compile 'net.lightbody.bmp:browsermob-core-littleproxy:2.1.0-beta-4' 
compile 'org.seleniumhq.selenium:selenium-java:2.45.0' 
compile 'com.codeborne:phantomjsdriver:1.2.1' 
compile 'net.anthavio:phanbedder-2.1.1:1.0.0' 

Надеюсь, это поможет вам отладить проблему, в которой вы работаете.

+0

Благодарим за предложение. Попробуем. – Programmer