2009-10-16 70 views
1

它是关于webdriver的,特别是HtmlUnitDriver和FirefoxWebDriver代理的HtmlUnit问题

我使用相同的代理服务器设置两个HtmlUnitDriver和FirefoxWebDriver,但只有FirefoxWebDriver工作。

我用HtmlUnitDriver得到的是来自代理服务器的“访问被拒绝”。当我没有使用代理设置时,我收到了一个空白页面。我不认为它与用户名或密码有关,因为如果我没有设置用户名或密码,我会得到同样的错误。

以下是我的代码,任何想法,将不胜感激。谢谢!

public WebDriver createHtmlUnitWebDriver() { 
    HtmlUnitDriver htmlUnitDriver = new HtmlUnitDriver() { 
     @Override 
     protected WebClient modifyWebClient(WebClient client) { 
      client.setProxyConfig(new ProxyConfig(PROXY_HOST, PROXY_PORT)); 

      DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider(); 
      credentialsProvider.addCredentials("username", "password"); 
      credentialsProvider.addProxyCredentials("username", "password", PROXY_HOST, PROXY_PORT); 
      client.setCredentialsProvider(credentialsProvider); 

      return client; 
     } 
    }; 

    htmlUnitDriver.setProxy(PROXY_HOST, PROXY_PORT); 
    htmlUnitDriver.setJavascriptEnabled(true); 

    return htmlUnitDriver; 
} 

public WebDriver createFirefoxWebDriver() { 
    FirefoxProfile firefoxProfile = new FirefoxProfile(); 

    firefoxProfile.setPreference("network.proxy.type", 1); 
    firefoxProfile.setPreference("network.proxy.http", PROXY_HOST); 
    firefoxProfile.setPreference("network.proxy.http_port", PROXY_PORT); 
    firefoxProfile.setPreference("network.proxy.ssl", PROXY_HOST); 
    firefoxProfile.setPreference("network.proxy.ssl_port", PROXY_PORT); 
    firefoxProfile.setPreference("network.proxy.no_proxies_on", ""); 

    return new FirefoxDriver(firefoxProfile); 
} 

回答

1

使用:

HtmlUnitDriver htmlUnitDriver = new HtmlUnitDriver(); 
htmlUnitDriver.get("http://www.google.com"); 

我可以看到代理细节被发送到底层的HttpClient(在HttpWebConnection.getResponse())方法。

您可以提供您的代理设置(如果它是公开的),或者您可以尝试直接使用HttpClient,看看它是否与您的代理不兼容?

P.S .:最好使用HtmlUnit用户列表,因为其他人也可能有兴趣提供帮助。

+0

请问您可以看看http://stackoverflow.com/questions/2131049/problem-in-htmlunit-api-for-java-headless-browser – 2010-01-25 08:37:27