У меня есть код, который инициализирует селеновый веб-драйвер и открывает страницу Chrome для моего маршрутизатора.Маршрутизатор требует базовой http-аутентификации, которую селен не поддерживает.Мне удалось найти способ обойти эту аутентификацию с использованием расширения Chrome (см. Ниже)
background.js
function callbackFn(details) {
return {
authCredentials: {
username: "user",
password: "pass"
}
};
}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
['blocking']
);
manifest.json
{
"version": "1.0.0",
"manifest_version": 2,
"name": "Chrome Auto Login",
"permissions": [
"proxy",
"tabs",
"unlimitedStorage",
"storage",
"<all_urls>",
"webRequest",
"webRequestBlocking"
],
"background": {
"scripts": ["background.js"]
},
"minimum_chrome_version":"22.0.0"
}
Чтобы проверить эту функцию, я включил вышеуказанное расширение в Chrome.Я захожу на страницу моего роутера с аутентификацией, и он полностью обходит экран.Это здорово, так как мне больше не нужен селен для обработки этого процесса входа в систему.
Однако, когда я добавляю расширение через селен, я получаю совершенно другие результаты, и код не работает так же в автоматизированном Chrome, какон работает в стандартном Chrome.
private class ChromeOptionsEx : ChromeOptions
{
public override ICapabilities ToCapabilities()
{
var r = (DesiredCapabilities)base.ToCapabilities();
r.SetCapability("pageLoadStrategy", "none");
AddExtension(@"ChromeAutoLoginExt.crx");
return r;
}
}
ChromeOptionsEx opt = new ChromeOptionsEx();
m_Driver = new ChromeDriver(opt);
//extension appears but does not bypass router login
m_Driver.Navigate().GoToUrl("chrome://extensions");
Расширение появляется и включается при запуске Chrome через селен, но оно не дает желаемых результатов.
Кто-нибудь может помочь?