使用 chrome driver/firefox 驱动程序时如何更改 Webdriver 中的文件下载位置
how to change file download location in Webdriver while using chrome driver/firefox driver
我正在尝试使用特定文件夹内的另存为选项来保存图像。我找到了一种方法,可以使用另存为选项右键单击要保存的图像。但是我遇到的问题是在收到 os window 询问文件保存位置后,我无法发送所需的位置,因为我不知道该怎么做。我经历了在这个论坛上提出的类似问题,但到目前为止没有一个帮助。
代码是-
Firefox-
public class practice {
public void pic() throws AWTException{
WebDriver driver;
//Proxy Setting
FirefoxProfile profile = new FirefoxProfile();
profile.setAssumeUntrustedCertificateIssuer(false);
profile.setEnableNativeEvents(false);
profile.setPreference("network.proxy.type", 1);
profile.setPreference("network.proxy.http", "localHost");
profile.setPreference("newtwork.proxy.http_port",3128);
//Download setting
profile.setPreference("browser.download.folderlist", 2);
profile.setPreference("browser.helperapps.neverAsk.saveToDisk","jpeg");
profile.setPreference("browser.download.dir", "C:\Users\Admin\Desktop\ScreenShot\pic.jpeg");
driver = new FirefoxDriver(profile);
driver.navigate().to("http://whosebug.com/users/2675355/shantanu");
driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"));
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"))).perform();
action.contextClick().perform();
Robot robo = new Robot();
robo.keyPress(KeyEvent.VK_V);
robo.keyRelease(KeyEvent.VK_V);
// Here I am getting the os window but don't know how to send the desired location
}//method
}//class
对于chrome-
public class practice {
public void s() throws AWTException{
WebDriver driver;
System.setProperty("webdriver.chrome.driver","C:\Users\Admin\Desktop\chromedriver.exe");
driver = new ChromeDriver();
driver.navigate().to("http://whosebug.com/users/2675355/shantanu");
driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"));
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"))).perform();
action.contextClick().perform();
Robot robo = new Robot();
robo.keyPress(KeyEvent.VK_V);
robo.keyRelease(KeyEvent.VK_V);
// Here I am getting the os window but don't know how to send the desired location
}
}
可能不是最好的解决方案,但您可以尝试使用 sikuli api 来确认保存显示的框。
另存为框是 OS window。
您部分回答了自己的问题:
the problem where i am stuck is after getting the os window
Selenium 是一个 浏览器 自动化工具 - os window 不是浏览器!您将需要使用其他东西。根据您的需要,有很多选择:Sikuli、Robot、AutoIt、...
代码中有两处出错。
Firefox:
您需要设置
profile.setPreference("browser.download.dir", "C:\Users\Admin\Desktop\ScreenShot\");
不会
profile.setPreference("browser.download.dir", "C:\Users\Admin\Desktop\ScreenShot\pic.jpeg");
其次,您正在设置首选项browser.download.folderlist,它是browser.download.folderList(文件夹列表中的L大写) .
一旦你完成了这两项,你就可以使用你的机器人class来执行所需的操作。
对于 Chromedriver 尝试:
String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
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);
希望这对您有所帮助。 :)
我花了很多时间研究如何在没有另存为弹出窗口的情况下在 firefox 浏览器中下载 pdf 文件。它可能会帮助某人。
经过一些本地调查,如何在没有任何另存为弹出窗口的情况下在 firefox 中下载 pdf 文件,我在 firefox 配置文件中找到了最低要求的首选项:
profile.setPreference("pdfjs.disabled", true);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
当然你可以添加一些额外的偏好。
它适用于 Firefox 45-46 版本。
对于Chrome 浏览器:
甚至您可以使用以下代码片段禁用 windows 对话(另存为对话)。您需要在 chromedriver 首选项中执行以下设置:
- 关闭出现的下载提示
- 设置下载文件的默认目录
- 如果启用了在浏览器中打开 PDF 文件的 PDF 查看插件,您可以禁用它以便自动开始下载
在浏览器中接受任何证书
String downloadFilepath = "/path/to/download/directory/";
Map<String, Object> preferences = new Hashtable<String, Object>();
preferences.put("profile.default_content_settings.popups", 0);
preferences.put("download.prompt_for_download", "false");
preferences.put("download.default_directory", downloadFilepath);
// disable flash and the PDF viewer
preferences.put("plugins.plugins_disabled", new String[]{
"Adobe Flash Player", "Chrome PDF Viewer"});
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", preferences);
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(capabilities);
使用相同的机器人 class 并按回车键 select Windows 对话框中的 "Save"。
robo.keyPress(KeyEvent.VK_ENTER);
robo.keyRelease(KeyEvent.VK_ENTER);
如果您需要重命名它,请复制剪贴板中的文件名并按如下方式传递
StringSelection file = new StringSelection("D:\image.jpg");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(file, null);
Robot rb = new Robot();
rb.setAutoDelay(2000); // Similar to thread.sleep
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
rb.keyRelease(KeyEvent.VK_V);
rb.setAutoDelay(2000);
rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_ENTER);
对于Chrome,它将起作用
String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
WebDriver driver = new ChromeDriver(options);
我正在尝试使用特定文件夹内的另存为选项来保存图像。我找到了一种方法,可以使用另存为选项右键单击要保存的图像。但是我遇到的问题是在收到 os window 询问文件保存位置后,我无法发送所需的位置,因为我不知道该怎么做。我经历了在这个论坛上提出的类似问题,但到目前为止没有一个帮助。
代码是-
Firefox-
public class practice {
public void pic() throws AWTException{
WebDriver driver;
//Proxy Setting
FirefoxProfile profile = new FirefoxProfile();
profile.setAssumeUntrustedCertificateIssuer(false);
profile.setEnableNativeEvents(false);
profile.setPreference("network.proxy.type", 1);
profile.setPreference("network.proxy.http", "localHost");
profile.setPreference("newtwork.proxy.http_port",3128);
//Download setting
profile.setPreference("browser.download.folderlist", 2);
profile.setPreference("browser.helperapps.neverAsk.saveToDisk","jpeg");
profile.setPreference("browser.download.dir", "C:\Users\Admin\Desktop\ScreenShot\pic.jpeg");
driver = new FirefoxDriver(profile);
driver.navigate().to("http://whosebug.com/users/2675355/shantanu");
driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"));
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"))).perform();
action.contextClick().perform();
Robot robo = new Robot();
robo.keyPress(KeyEvent.VK_V);
robo.keyRelease(KeyEvent.VK_V);
// Here I am getting the os window but don't know how to send the desired location
}//method
}//class
对于chrome-
public class practice {
public void s() throws AWTException{
WebDriver driver;
System.setProperty("webdriver.chrome.driver","C:\Users\Admin\Desktop\chromedriver.exe");
driver = new ChromeDriver();
driver.navigate().to("http://whosebug.com/users/2675355/shantanu");
driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"));
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"))).perform();
action.contextClick().perform();
Robot robo = new Robot();
robo.keyPress(KeyEvent.VK_V);
robo.keyRelease(KeyEvent.VK_V);
// Here I am getting the os window but don't know how to send the desired location
}
}
可能不是最好的解决方案,但您可以尝试使用 sikuli api 来确认保存显示的框。
另存为框是 OS window。
您部分回答了自己的问题:
the problem where i am stuck is after getting the os window
Selenium 是一个 浏览器 自动化工具 - os window 不是浏览器!您将需要使用其他东西。根据您的需要,有很多选择:Sikuli、Robot、AutoIt、...
代码中有两处出错。
Firefox: 您需要设置
profile.setPreference("browser.download.dir", "C:\Users\Admin\Desktop\ScreenShot\");
不会
profile.setPreference("browser.download.dir", "C:\Users\Admin\Desktop\ScreenShot\pic.jpeg");
其次,您正在设置首选项browser.download.folderlist,它是browser.download.folderList(文件夹列表中的L大写) .
一旦你完成了这两项,你就可以使用你的机器人class来执行所需的操作。
对于 Chromedriver 尝试:
String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
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);
希望这对您有所帮助。 :)
我花了很多时间研究如何在没有另存为弹出窗口的情况下在 firefox 浏览器中下载 pdf 文件。它可能会帮助某人。
经过一些本地调查,如何在没有任何另存为弹出窗口的情况下在 firefox 中下载 pdf 文件,我在 firefox 配置文件中找到了最低要求的首选项:
profile.setPreference("pdfjs.disabled", true);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
当然你可以添加一些额外的偏好。
它适用于 Firefox 45-46 版本。
对于Chrome 浏览器:
甚至您可以使用以下代码片段禁用 windows 对话(另存为对话)。您需要在 chromedriver 首选项中执行以下设置:
- 关闭出现的下载提示
- 设置下载文件的默认目录
- 如果启用了在浏览器中打开 PDF 文件的 PDF 查看插件,您可以禁用它以便自动开始下载
在浏览器中接受任何证书
String downloadFilepath = "/path/to/download/directory/"; Map<String, Object> preferences = new Hashtable<String, Object>(); preferences.put("profile.default_content_settings.popups", 0); preferences.put("download.prompt_for_download", "false"); preferences.put("download.default_directory", downloadFilepath); // disable flash and the PDF viewer preferences.put("plugins.plugins_disabled", new String[]{ "Adobe Flash Player", "Chrome PDF Viewer"}); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("prefs", preferences); DesiredCapabilities capabilities = DesiredCapabilities.chrome(); capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); capabilities.setCapability(ChromeOptions.CAPABILITY, options); driver = new ChromeDriver(capabilities);
使用相同的机器人 class 并按回车键 select Windows 对话框中的 "Save"。
robo.keyPress(KeyEvent.VK_ENTER); robo.keyRelease(KeyEvent.VK_ENTER);
如果您需要重命名它,请复制剪贴板中的文件名并按如下方式传递
StringSelection file = new StringSelection("D:\image.jpg");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(file, null);
Robot rb = new Robot();
rb.setAutoDelay(2000); // Similar to thread.sleep
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
rb.keyRelease(KeyEvent.VK_V);
rb.setAutoDelay(2000);
rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_ENTER);
对于Chrome,它将起作用
String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
WebDriver driver = new ChromeDriver(options);