如何在锁定屏幕的IE中自动下载文件

时间:2019-05-27 10:02:06

标签: python internet-explorer automation webdriver

我正在使用Selenium Webdriver在IE11上进行一些自动化,并且在屏幕锁定时卡在自动下载文件上。

按下按钮后开始下载文件。该按钮未链接到下载文件的网址,但似乎链接到javascript函数。在按下按钮之前,我已经进行了所有管理,但从IE11(打开或保存)一直停留在底部栏提示上。出于安全原因,我必须使用IE11并在锁定屏幕上进行自动化。我曾尝试使用WScript.Shell发送Alt + S,但是它似乎只有在解锁屏幕后才能工作。这是我尝试过的。

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 :(得分:0)

据我所知,当您单击下载链接或按钮时,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

更多详细信息,您可以参考this article

编辑:由于您使用的是python,因此可以使用find_element_by_id方法查找元素,然后使用get_attribute方法获取值。更多详细信息,您可以查看以下文章:

Get Element Attribute
Python + Selenium for Dummies like Me
WebDriver API
Get value of an input box using Selenium (Python)