Я пытаюсь автоматизировать загрузку XML-файла с помощью Google Chrome.
Я использую:
- Google Chrome v73.0.3683.75 (64 бита)
- Chromedriver v73
- Selenium WebDriver v3.14.0
- C #
Проблема возникает, когда появляется сообщение о вредоносном файле:
![Harmful file message](https://i.stack.imgur.com/nob2r.png)
Поскольку я использую Chromedriver, я не могу взаимодействовать с этим сообщением, поэтому я попытался принять загрузку со страницы chrome: // downloads.
Как только я открываю страницу загрузки chrome: //, я нажимаю кнопку Сохранить, но снова появляется предупреждение для подтверждения загрузки.
![Confirm download popup in chrome://downloads](https://i.stack.imgur.com/R2lIM.png)
Это всплывающее окно не является всплывающим окном Selenium, и Chromedriver может обрабатывать его с помощью методов Dismiss () / Accept () / SendKeys () / .... Когда я пытаюсь SwitchTo (), Chromedriver падает.
Я пытался напрямую отправить нажатия клавиш {TAB} и {SPACE} / {RIGHT} и {ENTER}, но, похоже, Chrome их не ловит ...
Полный код:
String currentWindow = this.Drivers[Navegador].CurrentWindowHandle;
String popupHandle = "";
((IJavaScriptExecutor)this.Drivers[Navegador]).ExecuteScript("window.open('about:blank','_blank')");
ReadOnlyCollection<String> tabs = this.Drivers[Navegador].WindowHandles;
foreach (string handle in tabs){
if (handle != currentWindow){
popupHandle = handle;
break;
}
}
this.Drivers[Navegador].SwitchTo().Window(popupHandle);
this.Drivers[Navegador].Navigate().GoToUrl("chrome://downloads");
String script = "return document.querySelector('body > downloads-manager').shadowRoot.querySelector('#downloadsList > downloads-item').shadowRoot.querySelector('#dangerous > paper-button:nth-child(2)');";
//String script = "return document.querySelector('body > downloads-manager').shadowRoot.querySelector('#downloadsList > downloads-item:nth-child(2)').shadowRoot.querySelector('#url').textContent;";
IWebElement boton = (IWebElement) ((IJavaScriptExecutor) this.Drivers[Navegador]).ExecuteScript(script);
boton.Click();
Thread.Sleep(2000);
SendKeys.Send("{TAB}{SPACE}");
Thread.Sleep(1000);
this.Drivers[Navegador].Close();
this.Drivers[Navegador].SwitchTo().Window(currentWindow);
this.Drivers[Navegador].SwitchTo().DefaultContent();
result = true;
ВАЖНОЕ ПРИМЕЧАНИЕ:
Я попытался запустить Chrome со всеми возможными флагами / options / экспериментальные_опции / user_preferences / ... и это не работает. Эти параметры / аргументы устарели в последних версиях Chrome или Chromedriver.