J'essaie de sauvegarder une image en utilisant l'option Enregistrer sous dans un dossier spécifique. J'ai trouvé un moyen par lequel je peux faire un clic droit sur l'image que je veux enregistrer en utilisant Enregistrer en tant qu'option. Mais le problème où je suis bloqué est après avoir obtenu la fenêtre du système d'exploitation qui demande où enregistrer le fichier. Je ne peux pas envoyer l'emplacement souhaité car je ne sais pas comment le faire. Je suis passé par les questions similaires posées sur ce forum mais aucune d’elles n’a aidé jusqu’à présent.
Code is-
Pour 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://stackoverflow.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
Pour 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://stackoverflow.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
}
}
Il y a deux choses qui ne vont pas dans le code.
Pour Firefox: Vous devez définir
profile.setPreference("browser.download.dir", "C:\\Users\\Admin\\Desktop\\ScreenShot\\");
ne pas
profile.setPreference("browser.download.dir", "C:\\Users\\Admin\\Desktop\\ScreenShot\\pic.jpeg");
deuxièmement, vous définissez préférence browser.download.folderlist , il s'agit de browser.download.folderList (L majuscule dans folderList).
Une fois que vous avez atteint cet objectif, vous pouvez utiliser ensuite votre classe Robot pour effectuer les opérations souhaitées.
Pour Chromedriver, essayez avec:
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);
J'espère que cela t'aides. :)
J'ai passé beaucoup de temps à chercher comment télécharger un fichier pdf dans le navigateur Firefox sans avoir l'apparence de Enregistrer sous. Il faut aider quelqu'un.
Après quelques recherches locales, comment télécharger pdf , fichier dans firefox sans aucune fenêtre Enregistrer sous, j'ai trouvé la préférence minimale requise dans le profil firefox:
profile.setPreference("pdfjs.disabled", true);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
Bien sûr, vous pouvez ajouter des préférences supplémentaires.
Cela fonctionne dans les versions de Firefox 45-46.
Pour Navigateur Chrome :
Même vous pouvez désactiver le dialogue Windows (Enregistrer en tant que dialogue) avec l'extrait de code suivant. Vous devez définir les préférences suivantes dans chromedriver:
Accepter n'importe quel certificat dans le navigateur
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);
Vous avez partiellement répondu à votre propre question:
le problème où je suis coincé est après avoir obtenu la fenêtre os
Selenium est un outil de navigation navigateur automation - os window n'est pas un navigateur! Vous devrez utiliser quelque chose d'autre. Il y a beaucoup de choix, selon vos besoins: Sikuli, Robot, AutoIt, ...
Utilisez la même classe Robot et appuyez sur Entrée pour sélectionner "Enregistrer" dans la boîte de dialogue Windows.
robo.keyPress (KeyEvent.VK_ENTER); robo.keyRelease (KeyEvent.VK_ENTER);
si vous devez le renommer, copiez le nom du fichier dans le presse-papier et transmettez-le comme ci-dessous.
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);
Pour Chrome, ça va marcher
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);
Ce n’est probablement pas la meilleure solution, mais vous pouvez essayer d’utiliser sikuli api pour confirmer la sauvegarde de la boîte affichée.
La zone Enregistrer sous est une fenêtre de système d'exploitation.