我正在使用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提示符,并在锁定屏幕期间自动将文件保存到下载文件夹中?
答案 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)