Как автоматически скачать файл в IE на заблокированном экране - PullRequest
0 голосов
/ 27 мая 2019

Я использую Selen-Webdriver, чтобы выполнить некоторую автоматизацию в IE11, и застрял в автозагрузке файла, пока экран заблокирован.

Загрузка файла начинается после нажатия кнопки. Эта кнопка не ссылается на URL для загружаемого файла, но, похоже, ссылается на функцию javascript. Я справился со всем до нажатия кнопки, но застрял в подсказке нижней панели IE11 (открыть или сохранить). По соображениям безопасности я должен использовать IE11 и выполнять автоматизацию на заблокированном экране. Я пытался отправить Alt + S с помощью WScript.Shell, но, похоже, он работал только после разблокировки экрана. Вот что я попробовал.

shell = win32.Dispatch("WScript.Shell")

config = Path(localpath + localfile)

#confirm file exists
while not config.is_file():
    shell.SendKeys("%s", 0)
    time.sleep(2)

Есть ли способ обойти приглашение IE и автоматически сохранить файл в папке загрузки во время заблокированного экрана?

1 Ответ

0 голосов
/ 27 мая 2019

Насколько мне известно, WebDriver не имеет возможности доступа к диалоговым окнам загрузки IE, представленным браузерами, когда вы нажимаете на ссылку или кнопку загрузки.Но мы можем обойти эти диалоговые окна, используя отдельную программу под названием " wget ".

, мы можем использовать программу командной строки и этот wget для загрузки файла.Код как показано ниже (следующий код является кодом C #, вы можете преобразовать его в Python):

            var options = new InternetExplorerOptions()
            {
                InitialBrowserUrl = URL,  // "http://demo.guru99.com/test/yahoo.html";
                IntroduceInstabilityByIgnoringProtectedModeSettings = true
            };

            //IE_DRIVER_PATH: @"D:\Downloads\webdriver\IEDriverServer_x64_3.14.0";
            var driver = new InternetExplorerDriver(IE_DRIVER_PATH, options);
            driver.Navigate();
            Thread.Sleep(5000);

            //get the download file link.
            String sourceLocation = driver.FindElementById("messenger-download").GetAttribute("href");
            Console.WriteLine(sourceLocation);

            //using command-line program to execute the script and download file.
            String wget_command = @"cmd /c D:\\temp\\wget.exe -P D:\\temp --no-check-certificate " + sourceLocation;

            try
            {
                Process exec = Process.Start("CMD.exe", wget_command);
                exec.WaitForExit();
                Console.WriteLine("success");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            driver.Close(); // closes browser
            driver.Quit(); // closes IEDriverServer process

Более подробно, вы можете обратиться к этой статье .

Редактировать : Поскольку вы используете python, вы можете использовать метод find_element_by_id, чтобы найти элемент, а затем использовать метод get_attribute, чтобы получить значение.Более подробно, вы можете проверить эти статьи:

Получить атрибут элемента Python + Selenium для чайников вроде меня API WebDriver Получить значение поля ввода, используя Selenium (Python)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...