web-dev-qa-db-ja.com

chrome driver / firefox driverを使用しながらWebdriverでファイルのダウンロード場所を変更する方法

特定のフォルダ内でオプションとして保存を使用して画像を保存しようとしています。 [名前を付けて保存]オプションを使用して、保存する画像を右クリックできる方法を見つけました。しかし、私が立ち往生している問題は、ファイルを保存する場所を尋ねるOSウィンドウを取得した後、それを行う方法がわからないため、目的の場所を送信できないことです。私はこのフォーラムで尋ねられた同様の質問をしましたが、今のところそれらのどれも助けませんでした。

コードは

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

クロム用

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
   }
 }

This is the pop up window where I am stuck

19
Shantanu Nandan

コードで間違っていることが2つあります。

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(folderListのLキャップ)です。

この両方を達成したら、Robotクラスを使用して目的の操作を実行できます。

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);

お役に立てれば。 :)

22
Vivek Singh

「名前を付けて保存」ポップアップ表示なしで、FirefoxブラウザーでPDFファイルをダウンロードする方法を調査するのに多くの時間を費やしました。それは誰かを助けることができます。

いくつかのローカル調査の後、「名前を付けて保存」ポップアップなしでFirefoxでpdfファイルをダウンロードする方法の後に、Firefoxプロファイルで最低限必要な設定を見つけました:

profile.setPreference("pdfjs.disabled", true);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");

もちろん、いくつかの追加設定を追加できます。

Firefox 45-46バージョンで動作します。

2

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);
    
2
Muhammad

あなた自身の質問に部分的に答えました:

私が立ち往生している問題は、OSウィンドウを取得した後です

Seleniumはブラウザ自動化ツールです-os windowはブラウザではありません!他のものを使用する必要があります。ニーズに応じて、Sikuli、Robot、AutoItなど、多くの選択肢があります。

0
SiKing

同じRobotクラスを使用してEnterキーを押し、Windowsダイアログボックスで[保存]を選択します。

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);
0
Thirumaran

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);
0
Bachan Joseph

おそらく最善の解決策ではありませんが、sikuli apiを使用して、表示されるボックスの保存を確認することができます。

[名前を付けて保存]ボックスはOSウィンドウです。

0
user1586480