Java 为HtmlUnitDriver Selenium设置用户代理

Java 为HtmlUnitDriver Selenium设置用户代理,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,如何在Selenium Java中设置HtmlUnitDriver的用户代理属性? 我可以用 FirefoxProfile ffp = new FirefoxProfile(); ffp.setPreference("general.useragent.override", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3;

如何在Selenium Java中设置HtmlUnitDriver的用户代理属性? 我可以用

FirefoxProfile ffp = new FirefoxProfile();
ffp.setPreference("general.useragent.override", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7");
WebDriver driver = new FirefoxDriver(ffp);
有没有办法为HtmlUnitDriver做到这一点?
我尝试使用setCapability(“UserAgentName”,“一些UA设置”);但这不起作用。

您是否尝试使用DesiredCapabilities

DesiredCapabilities capabilities = DesiredCapabilities.htmlUnit();
capabilities.setBrowserName(<browser_name>);
capabilities.setPlatform(<platform>);
capabilities.setVersion(<version>);
driver = new HtmlUnitDriver(capabilities);
DesiredCapabilities=DesiredCapabilities.htmlUnit();
setBrowserName();
setPlatform();
setVersion();
驱动程序=新的HtmlUnitDriver(功能);

HtmlUnitDriver设置自定义用户代理字符串

final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20160101 Firefox/66.0";

WebDriver driver = new HtmlUnitDriver(new BrowserVersion(
                "Firefox", "5.0 (Windows)", USER_AGENT, 66 //important is 3rd argument
));

它起作用了。我对它进行了测试,以便从远程服务器获取用户代理

(OS:W7,Selenium版本:2.37.1,Java 7u45 x64)


(另请参见JavaDoc)

HtmlUnit提供了有关浏览器版本的信息。现在,要更改设置用户代理字符串的模拟浏览器版本,您必须指定浏览器
version
功能,例如:

Chrome(默认) Internet Explorer Firefox(未指定Firefox版本,默认为52) Firefox(指定两个可用版本之一:45或52) 以上是所有可用的版本


要验证它们是否已更改,请选中。

我有一个文本文件,每行都有用户代理设置。在您上面的代码中,我是否必须解析该行并找出浏览器名称、平台和版本?一行的示例是Mozilla/4.0(兼容;MSIE 7.0;Windows NT 5.1;GTB7.3;.NET CLR 2.0.50727;OfficeLiveConnector.1.3;OfficeLivePatch.0.0;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729;ShopperReports 3.0.497.0;SRS_IT≖571bc76585634a191)。我认为解析字符串是必要的。您可以按照答案中所述设置功能,也可以使用
DesiredCapabilities(java.util.Map rawMap)
将值放入映射并将其分配给对象。
@Test
public void testUserAgent() throws Exception {
    driver.get("http://myhttp.info");
    MyHttpInfoPage myHttpInfoPage = PageFactory.initElements(driver, MyHttpInfoPage.class);
    String userAgent = myHttpInfoPage.getUserAgent(); // @FindBy(xpath = "//td[text()='User agent']/following-sibling::td")
    Assert.assertEquals(userAgent, USER_AGENT);
}
DesiredCapabilities capabilities = DesiredCapabilities.htmlUnit();
capabilities.setVersion(org.openqa.selenium.remote.BrowserType.CHROME);
WebDriver myDriver = new HtmlUnitDriver(capabilities);
DesiredCapabilities capabilities = DesiredCapabilities.htmlUnit();
capabilities.setVersion(org.openqa.selenium.remote.BrowserType.IE);
WebDriver myDriver = new HtmlUnitDriver(capabilities);
DesiredCapabilities capabilities = DesiredCapabilities.htmlUnit();
capabilities.setVersion(org.openqa.selenium.remote.BrowserType.FIREFOX);
WebDriver myDriver = new HtmlUnitDriver(capabilities);
DesiredCapabilities capabilities = DesiredCapabilities.htmlUnit();
// specify ff version 45
capabilities.setVersion(org.openqa.selenium.remote.BrowserType.FIREFOX + "-45");
// ...or specify ff version 52
capabilities.setVersion(org.openqa.selenium.remote.BrowserType.FIREFOX + "-52");
WebDriver myDriver = new HtmlUnitDriver(capabilities);