如何在selenium中使用addCustomRequestHeader方法?

如何在selenium中使用addCustomRequestHeader方法?,selenium,selenium-rc,selenium-webdriver,Selenium,Selenium Rc,Selenium Webdriver,我试图使用addCustomRequestHeader方法为selenium请求设置自定义头。下面给出的是源代码 Selenium sel = new DefaultSelenium("localhost",4444,"*firefox","http://www.google.com"); sel.start("addCustomRequestHeader=true"); // sel.start(); sel.addCustomRequestHeader(

我试图使用addCustomRequestHeader方法为selenium请求设置自定义头。下面给出的是源代码

       Selenium sel = new DefaultSelenium("localhost",4444,"*firefox","http://www.google.com");
       sel.start("addCustomRequestHeader=true");
//  sel.start();
    sel.addCustomRequestHeader("mycustomheader","automation");
    sel.open("http://www.google.com/");

此代码未将标头添加到请求中。我尝试使用Fiddler查找请求头。这里有人知道我做错了什么吗?如果您需要在代理注入模式下启动selenium,将不胜感激

java -jar selenium-server-standalone.jar -proxyInjectionMode
然后可以像这样添加自定义请求头(在Python中)

要查看是否应用了自定义头,请检查运行selenium服务器的选项卡。您应该在控制台消息中看到类似的内容

INFO - Command request: addCustomRequestHeader[mycustomheader, automation] on session 
INFO - Got result: OK on session 

在我的例子中,在代理注入模式下运行selenium是不可接受的,因此我采用了“ModHeader”chrome扩展的方法来设置自定义头。这对我很管用

ModHeader Extension: https://github.com/mdamien/chrome-extensions-archive
下面是代码片段

ChromeOptions chromeOpt = new ChromeOptions();
chromeOpt.addArguments("--no-sandbox");
System.setProperty("webdriver.chrome.args", "--disable-logging");
System.setProperty("webdriver.chrome.silentOutput", "true");

chromeOpt.addExtensions(new File("./ModHeader_v2.2.3.crx"));

WebDriver driver = new ChromeDriver(chromeOpt);

// set the context on the extension so the localStorage can be accessed
driver.get("chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/icon.png");

// setup ModHeader with two headers (token1 and token2)
((JavascriptExecutor)driver).executeScript(
"localStorage.setItem('profiles', JSON.stringify([{                " +
"  title: 'Selenium', hideComment: true, appendMode: '',           " +
"  headers: [                                                      " +
"    {enabled: true, name: 'token1', value: 'testHeaderValue1', comment: ''}, " +
"    {enabled: true, name: 'token2', value: 'testHeaderValue2', comment: ''}  " +
"  ],                                                              " +
"  respHeaders: [],                                                " +
"  filters: []                                                     " +
"}]));                                                             ");
driver.navigate().to("https://localhost:8443");
Fiddler自定义头快照

它适用于任何自定义头还是仅支持已知HTTP头?也就是说,它的行为可能更像addRequestHeader()。请尝试将Selenium设置为代理服务器,本文将对此进行讨论
ChromeOptions chromeOpt = new ChromeOptions();
chromeOpt.addArguments("--no-sandbox");
System.setProperty("webdriver.chrome.args", "--disable-logging");
System.setProperty("webdriver.chrome.silentOutput", "true");

chromeOpt.addExtensions(new File("./ModHeader_v2.2.3.crx"));

WebDriver driver = new ChromeDriver(chromeOpt);

// set the context on the extension so the localStorage can be accessed
driver.get("chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/icon.png");

// setup ModHeader with two headers (token1 and token2)
((JavascriptExecutor)driver).executeScript(
"localStorage.setItem('profiles', JSON.stringify([{                " +
"  title: 'Selenium', hideComment: true, appendMode: '',           " +
"  headers: [                                                      " +
"    {enabled: true, name: 'token1', value: 'testHeaderValue1', comment: ''}, " +
"    {enabled: true, name: 'token2', value: 'testHeaderValue2', comment: ''}  " +
"  ],                                                              " +
"  respHeaders: [],                                                " +
"  filters: []                                                     " +
"}]));                                                             ");
driver.navigate().to("https://localhost:8443");