Всем привет!
Недавно начал ловить проблему при запуске тестов в адаптивном режиме System.setProperty("chromeoptions.mobileEmulation", "deviceName=" + System.getenv("DEVICE_NAME"));
. При запуске новой сессии всегда пустой заголовок Sec-ch-ua, из-за чего внутренние механизмы безопасников блочат мои запросы к серверу, с ошибкой - Header ‘sec-ch-ua’ has no value .
Если запускать тесты в обычном режиме, то все ок.
Вопрос, сталкивался ли кто с таким, в рамках запуска в режиме мобильной эмуляции?
Думаю надо либо как-то подменить этот хедер, либо удалить, но ни тот ни другой вариант пока реализовать не смог.
asolntsev
(asolntsev)
27.Июль.2023 21:28:26
#2
Привет!
Откуда бы ни брался этот заголовок, Селенид тут точно не при чём. Скорее его сам браузер добавляет. И у меня он точно не пустой.
Когда запускаю тесты в хроме: Sec-Ch-Ua: "Not/A)Brand";v="99", "Google Chrome";v="115", "Chromium";v="115"
Когда запускаю тесты в Edge: Sec-Ch-Ua: "Not/A)Brand";v="99", "Microsoft Edge";v="115", "Chromium";v="115"
.
Спасибо за ответ!
В обычном режиме у меня тоже есть данный заголовок, его нет только в режиме мобильной эмуляции, к сожалению.
Может можно через прокси задать нужный хедер перед запуском вебдрайвера? Пытался найти пример, не нашел.
sergueik
(Сергей Кузьмин)
28.Июль.2023 13:12:27
#4
vladpogrom:
Sec-ch-ua
opened 02:47PM - 06 Jun 23 UTC
closed 05:37AM - 07 Jun 23 UTC
I-defect
G-chromedriver
### What happened?
Hello,
Using windows 10.
Selenium dotnet client.
Selenium… 4.9.1.
The issue started with Chrome and Edge 114 versions.
Since the last versions of Chrome and Edge 114, when I pass User-Agent as Options on start browser, we noticed that Sec-Ch-Ua and Sec-Ch-Ua-Platforms Requests Headers are being empty.
On chrome/edge version 114:
![image](https://github.com/SeleniumHQ/selenium/assets/57837594/58a80ea3-fbe7-47ec-a061-a9f7c3eec448)
On previous versions:
![image](https://github.com/SeleniumHQ/selenium/assets/57837594/f76d31b7-b316-4256-81db-a6c354b114cf)
We also noticed this issue opened on chromium, do you think it's also related?
https://bugs.chromium.org/p/chromium/issues/detail?id=1443649&q=User-Agent&can=2
### How can we reproduce the issue?
```shell
Pass User-Agent to Chrome/Edge browser as Options.
Check network request headers.
```
### Relevant log output
```shell
Sec-Ch-Ua:
Sec-Ch-Ua-Mobile:
?0
Sec-Ch-Ua-Platform:
Sec-Fetch-Dest:
empty
Sec-Fetch-Mode:
cors
Sec-Fetch-Site:
same-origin
User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
X-Xsrf-Token:
ae47fvfeD_-V2Bej_Za00ToxNjg2MDYyNzY
```
### Operating System
Windows 10
### Selenium version
Selenium 4.9.1
### What are the browser(s) and version(s) where you see this issue?
Chrome 114, Edge 114
### What are the browser driver(s) and version(s) where you see this issue?
ChromeDriver 113 & MSEdgeDriver 113
### Are you using Selenium Grid?
_No response_
пока они чинят просто через CDP добавьте заголовок…
1 лайк
Так вот пример бы как лучше, через прокси или как-то другим способом?
Просто добавить заголовок не работает, все равно подменяет на пустой
Проще уж дождаться фикса)
sergueik
(Сергей Кузьмин)
29.Июль.2023 00:30:21
#6
А на каком языке вы пишете ваши тесты ?
на нем вот и добавьте нужные хедеры …
sergueik
(Сергей Кузьмин)
01.Август.2023 15:47:34
#7
вот линк примеров на яве Selenium 4.x который вставляет набор sec- заголовков
через CDPCommand
headers.put("Sec-Ch-Ua-Arch", "x86");
headers.put("Sec-Ch-Ua-Platform", "Windows");
String[] headerNames = new String[headers.keySet().size()];
headers.keySet().toArray(headerNames);
String customHeaderName = headerNames[new Random((new Date()).getTime())
.nextInt(headers.keySet().size())];
params.put("headers", headers);
command = "Network.setExtraHTTPHeaders";
driver.executeCdpCommand(command, params);
driver.get(baseURL);
WebElement element = wait.until(ExpectedConditions.visibilityOf(driver
.findElement(By.cssSelector("#maincontent > div.middlecol > table"))));
text = element.getText();
assertThat(text, containsString(customHeaderName));
// System.err.println(text);
System.err.println("Verified: " + customHeaderName);
}
или DevTools
headers = new HashMap<>();
headers.put("Sec-Ch-Ua",
"\"Not_A Brand\";v=\"42\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"");
headers.put("Sec-Ch-Ua-Arch", "x86");
headers.put("Sec-Ch-Ua-Platform", "Windows");
String[] headerNames = new String[headers.keySet().size()];
headers.keySet().toArray(headerNames);
String customHeaderName = headerNames[new Random((new Date()).getTime())
.nextInt(headers.keySet().size())];
chromeDevTools.send(Network.setExtraHTTPHeaders(new Headers(headers)));
driver.get(baseURL);
WebElement element = wait.until(ExpectedConditions.visibilityOf(driver
.findElement(By.cssSelector("#maincontent > div.middlecol > table"))));
text = element.getText();
assertThat(text, containsString(customHeaderName));
System.err.println("Verified: " + customHeaderName);
}
}
и проверяет что они там есть:
}
@Before
public void before() throws UnsupportedEncodingException {
wait = new WebDriverWait(driver, Duration.ofSeconds(flexibleWait));
wait.pollingEvery(Duration.ofMillis(pollingInterval));
chromeDevTools.send(Network.enable(Optional.of(100000000), Optional.empty(),
Optional.empty()));
// add event listener to log custom headers requests are sending with
chromeDevTools.addListener(Network.requestWillBeSent(), o -> {
headers.keySet().stream()
.forEach(h -> System.err.println(
String.format("request will be sent with extra header %s=%s", h,
o.getRequest().getHeaders().get(h))));
});
}
@Test
public void test1() {
1 лайк
Огромное спасибо, попробую!
Не знал о таких способах общения с драйвером)