Как отключить всплывающее окно "Этот тип файлов может нанести вред вашему компьютеру"
Я использую Селен Хромедрайвер для автоматизации веб-приложений. В моем приложении мне нужно скачать XML-файлы. Но когда я загружаю XML-файл, я получаю сообщение "Этот тип файла может нанести вред вашему компьютеру". Я хочу отключить это всплывающее окно с помощью селена Хромедрайвер, и я хочу, чтобы файлы такого типа загружались всегда. Как это может быть сделано?
- Версия Selenium: 2.47.1
- Версия Chromedriver: 2.19
ОБНОВЛЕНИЕ это давняя ошибка Chrome с 2012 года.
9 ответов
Проблема с файлами XML начала происходить со мной в Chrome 47.0.2526.80 m. Потратив, возможно, 6 часов, пытаясь отключить все возможные варианты безопасности, я попробовал другой подход.
По иронии судьбы, кажется, что включение опции Chrome "Protect you and your device from dangerous sites"
удаляет сообщение "This type of file can harm your computer. Do you want to keep file.xml anyway?"
Я использую 'Ruby' с 'Watir-Webdriver', где код выглядит так:
prefs = {
'safebrowsing' => {
'enabled' => true,
}
}
b = Watir::Browser.new :chrome, :prefs => prefs
Запуск браузера, как это, с safebrowsing
опция включена, загружает файлы XML без предупреждения о сообщении. Принцип должен быть одинаковым для Selenium с любым языком программирования.
##### Отредактировано: 13-04-2017
В последней версии Google Chrome вышеуказанного решения недостаточно. Кроме того, необходимо запустить браузер с помощью следующего переключателя:
--safebrowsing-disable-download-protection
Теперь код для запуска браузера будет выглядеть примерно так:
b = Watir::Browser.new :chrome, :prefs => prefs, :switches => %w[--safebrowsing-disable-download-protection]))
Следующий код Python работает для меня
chromeOptions = webdriver.ChromeOptions()
prefs = {'safebrowsing.enabled': 'false'}
chromeOptions.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(chrome_options=chromeOptions)
Я публикую ниже полный код, который помог мне загрузить файл: Надеюсь, это поможет:-) Я использую Java-Selenium
System.setProperty("webdriver.chrome.driver", "C:/chromedriver/chromedriver.exe");
String downloadFilepath = "D:/MyDeskDownload";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
chromePrefs.put("safebrowsing.enabled", "true");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);
Принятый ответ перестал работать после недавнего обновления Chrome. Теперь вам нужно использовать --safebrowsing-disable-extension-blacklist
а также --safebrowsing-disable-download-protection
переключатели командной строки. Это конфиг WebdriverIO, который работает для меня:
var driver = require('webdriverio');
var client = driver.remote({
desiredCapabilities: {
browserName: 'chrome',
chromeOptions: {
args: [
'disable-extensions',
'safebrowsing-disable-extension-blacklist',
'safebrowsing-disable-download-protection'
],
prefs: {
'safebrowsing.enabled': true
}
}
}
});
Обратите внимание, что я также отключаю расширения, потому что они обычно мешают автоматическому тестированию, но это не является строго необходимым для решения проблемы с загрузкой файлов XML и JavaScript.
Я нашел эти переключатели, прочитав этот список. Вы также можете увидеть их в источнике хрома.
Я столкнулся с этим недавно, используя Katalon Studio, Chrome версии 88. К счастью, только включение безопасного просмотра помогло. Вы получаете доступ к настройкам через «Настройки проекта» и переходите к «Желаемые возможности» -> «Веб-интерфейс» -> «Chrome». Если у вас нет настройки «prefs», добавьте ее и установите тип «Словарь». Затем в Value добавьте логическое значение с именем «safebrowsing.enabled» и установите значение «true». Результат может выглядеть так: (И вы можете указать, что настройка каталога по умолчанию не имеет ничего общего с этим примером).
Я использовал все предложенные варианты хрома в C#, и только тогда, когда мой интернет был подключен, у меня работал, но когда интернет отключился, ни один из них не работал у меня. (Я не уверен, возможно, Chrome Safebrowsing необходимо для подключения к Интернету)
Используя старую версию chrome(версия 71) и chromedriver(версия 2.46) и после загрузки, я увидел, что имя загруженного XML-файла имеет значение "Не подтверждено" с расширением "crdownload", и синтаксический анализ XML-файла не работал должным образом. Наконец, создание ожидания сThread.Sleep(1000)
решил мою проблему.
IWebDriver Driver;
//chromedriver.exe version2.46 path
string path = @"C:\cd71";
ChromeDriverService driverService = ChromeDriverService.CreateDefaultService(path, "chromedriver.exe");
ChromeOptions options = new ChromeOptions();
// options.AddArgument("headless");
options.AddArgument("--window-position=-32000,-32000");
options.AddUserProfilePreference("download.default_directory", @"c:\xmlFiles");
options.AddUserProfilePreference("download.prompt_for_download", false);
options.AddUserProfilePreference("disable-popup-blocking", "true");
options.AddUserProfilePreference("safebrowsing.enabled", "true");
Driver = new ChromeDriver(driverService, options);
try
{
Driver.Navigate().GoToUrl(url);
Thread.Sleep(1000);
//other works like: XML parse
}
catch
{
}
Для контекста у меня был .csv
со списком .swf
flash-документы и их соответствующие URL-адреса. Поскольку к файлам можно было получить доступ только после действительного входа в систему, я не мог использовать простойrequests
на основе решения.
Как .xml
, скачивая .swf
запускает аналогичное приглашение.
Ни один из ответов не помог мне.
Поэтому я убрал все дополнительные аргументы и настройки, предложенные выше, и просто создал экземпляр chrome headless
.
options.add_argument("--headless")
prefs = {
"download.default_directory": "C:\LOL\Flash",
"download.prompt_for_download": False,
"download.directory_upgrade": True,
}
options.add_experimental_option("prefs",prefs)
Единственное решение, которое работает для меня:
Использовать аргумент с путем к профилю Chrome
chromeOptions.add_argument(chrome_profile_path)
Искать файл download_file_types.pb
в папке профиля Chrome. В моем случае..chromedriver\my_profile\FileTypePolicies\36\download_file_types.pb
Сделайте резервную копию этого файла и затем откройте с помощью любого hexeditor (можно использовать oline).
Найдите тип файла, который хотите загрузить, т.е. xml
и измените его на что угодно, т.е. xxx
Я использую версию Google 80.0.3987.122 (официальная сборка) (32-разрядная версия) и ChromeDriver 80.0.3987.106. Получение той же ошибки даже после добавления нижеприведенного при загрузке файла.xml.
$ChromeOptions = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$ChromeOptions.AddArguments(@(
"--disable-extensions",
"--ignore-certificate-errors"))
$download = "C:\temp\download"
$ChromeOptions.AddUserProfilePreference("safebrowsing.enabled", "true");
$ChromeOptions.AddUserProfilePreference("download.default_directory", $download);
$ChromeOptions.AddUserProfilePreference("download.prompt_for_download", "false");
$ChromeOptions.AddUserProfilePreference("download.directory_upgrade", "true");
$ChromeDriver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($chromeOptions)