2009-10-16 73 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