web-dev-qa-db-ja.com

ChromeブラウザのセレンWebdriverでプロキシ認証を設定する方法

WebアプリケーションSelenium 2.0 [webdriver + Java]を自動化しようとしています。現在、Webアプリケーションはローカルネットワーク上のUATサーバーにデプロイされています。テストケースは実行中ですが、プロキシ認証の詳細を手動で入力する必要がありますChromeテスト実行開始時のインスタンス。スタックオーバーフローで提供されるすべてのソリューションを試しましたが、それでも認証メッセージが表示されます。

enter image description here

これは、ドライバの初期化プロセスで使用しているコードです

パッケージcom.misyn.ess.ui;

import Java.util.Arrays;
import org.openqa.Selenium.Proxy;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.chrome.ChromeDriver;
import org.openqa.Selenium.chrome.ChromeOptions;
import org.openqa.Selenium.remote.DesiredCapabilities;

/**
 *
 * @author User
 */
public class DriverClass {

    private String baseUrl;
    private String driverPath;
    private String driverName;
    private static WebDriver driver;
    private static DriverClass driverClass;

        private DriverClass() {
            try {
                baseUrl = "http://192.168.0.10:8282/ess";
                driverPath = "E:\\Work_Folder\\SelTools\\chromedriver.exe";
                driverName = "webdriver.chrome.driver";

                //Set the location of the ChromeDriver
            System.setProperty(driverName, driverPath);
            //Create a new desired capability
            DesiredCapabilities capabilities = DesiredCapabilities.chrome();
            // Create a new proxy object and set the proxy
            Proxy proxy = new Proxy();
            proxy.setHttpProxy("192.168.0.200:3128");
            proxy.setSocksUsername("avishka");
            proxy.setSocksPassword("12345678");
            //Add the proxy to our capabilities 
            capabilities.setCapability("proxy", proxy);
            //Start a new ChromeDriver using the capabilities object we created and added the proxy to
            driver = new ChromeDriver(capabilities);

            //Navigation to a url and a look at the traffic logged in fiddler
            driver.navigate().to(baseUrl);


    //            System.setProperty(driverName, driverPath);
    //            driver = new ChromeDriver();
    //            driver.get(baseUrl);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

ポップアップ(認証)に詳細を手動で入力するよりも、アプリケーション自体からこのプロキシのユーザー名とパスワードを提供する方法を誰かに解決策を教えてもらえますか?

現在回答されている方は

Selenium 3.4の時点ではまだベータ版です現在、実装はInternetExplorerDriverに対してのみ行われています

Selenium 3.0とGoogle Chrome=をWebブラウザとして使用している場合。

5
Avishka Perera
    public class DriverClass {

    private String baseUrl;
    private String driverPath;
    private String driverName;
    private static WebDriver driver;
    private static DriverClass driverClass;

    public DriverClass() {
        try {
            baseUrl = "http://192.168.0.10:8282/ess";
            driverPath = "E:\\Work_Folder\\SelTools\\chromedriver.exe";
            driverName = "webdriver.chrome.driver";
            System.setProperty(driverName, driverPath);

            Proxy proxy = new org.openqa.Selenium.Proxy();
            proxy.setSslProxy("192.168.0.200" + ":" + 3128);
            proxy.setFtpProxy("192.168.0.200" + ":" + 3128);
            proxy.setSocksUsername("avishka");
            proxy.setSocksPassword("12345678");

            DesiredCapabilities desiredCapabilities = DesiredCapabilities.chrome();
            desiredCapabilities.setCapability(CapabilityType.PROXY, proxy);


            driver = new ChromeDriver(desiredCapabilities);


            driver.get(baseUrl);


        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

プロキシ設定が追加され、プロキシ認証に値を渡すための望ましい機能が追加され、最終的に機能しました

0
Avishka Perera

HTTP基本認証のマルチパス で実行できます

拡張機能をダウンロードする
https://chrome.google.com/webstore/detail/multipass-for-http-basic/enhldmjbphoeibbpdhmjkchohnidgnah

拡張機能をcrxとしてダウンロードします。 chrome-extension-downloader からcrxとして入手できます。

その後の設定は簡単です。

import Java.io.File;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.chrome.ChromeDriver;
import org.openqa.Selenium.chrome.ChromeOptions;

/**
 *
 * @author Phystem
 */
public class ChromeAuthTest {

    WebDriver driver;

    public ChromeAuthTest() {
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
    }

    private void initDriver() {
        ChromeOptions cOptions = new ChromeOptions();
        cOptions.addExtensions(new File("MultiPass-for-HTTP-basic-authentication_v.crx"));
        driver = new ChromeDriver(cOptions);
        configureAuth(
                "https://the-internet.herokuapp.com/basic_auth",
                "admin",
                "admin");
    }

    private void configureAuth(String url, String username, String password) {
        driver.get("chrome-extension://enhldmjbphoeibbpdhmjkchohnidgnah/options.html");
        driver.findElement(By.id("url")).sendKeys(url);
        driver.findElement(By.id("username")).sendKeys(username);
        driver.findElement(By.id("password")).sendKeys(password);
        driver.findElement(By.className("credential-form-submit")).click();
    }

    public void doTest() {
        initDriver();
        driver.get("https://the-internet.herokuapp.com/basic_auth");
        System.out.println(driver.getTitle());
        driver.quit();
    }

    public static void main(String[] args) {
        new ChromeAuthTest().doTest();
    }
}

テストには サンプルサイト を使用しました。

Auth認証機能でURL、ユーザー名、パスワードを入力して、

3
Madhan

このコード(Avishka Pereraの回答から)は私には機能しません。

    proxy.setSocksUsername("avishka");
    proxy.setSocksPassword("12345678");

この方法で設定されたユーザー名とパスワードは、http/httpsプロキシに対して有効になりません-プロキシ認証ボックスがポップアップします。

私はSelenium Java 3.141.0、ChromeDriver 2.33およびchrome 70を使用しています。私にとってうまくいくのは、ここでマイクの回答に従うことです Pythonを使用するSelenium:Firefoxのhttpプロキシパスワードを入力/提供します 。 Zipファイルを作成し、次のような拡張子を追加します。

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addExtensions(new File("src/test/resources/proxy.Zip"));
WebDriver driver = new ChromeDriver(chromeOptions);

1つの問題は、ヘッドレスモードのchromeに拡張子を付けることができないため、「-headless」引数を設定すると上記のコードでエラーが発生することです( Google Chromeをヘッドレスで実行することは可能ですか?拡張子付きモード? )。 ChromeがDockerコンテナーで実行され、UIを表示できない場合、このソリューションを機能させるには、ヘッドレスモードではなくXvfbで実行する必要があります。

1
shiuu

FirefoxとChromeの両方でSeleniumワイヤーを使用して認証済みプロキシを追加する簡単な方法

Pythonで

ステップ:1

pip3 install Selenium-wire

ステップ:2

from seleniumwire import webdriver
from Selenium import webdriver

ステップ:3

下にあるフォーマットでプロキシを追加する

proxy= "username:password@ip:port"
        options = {'proxy': {'http': proxy, 'https': proxy, 'no_proxy': 'localhost,127.0.0.1,dev_server:8080'}}

step:4プロキシを引数として渡します

[〜#〜]クローム[〜#〜]

driver = webdriver.Chrome(options=chrome_options, executable_path="path of chrome driver", seleniumwire_options=options)

Firefox

driver = webdriver.Firefox(seleniumwire_options=options, executable_path="path of firefox driver", options=firefox_options)

step:5URLをリクエストして適用されたプロキシを確認します https://whatismyipaddress.com/

time.sleep(20)
driver.get("https://whatismyipaddress.com/")

注:ただし、プロキシを適用するために外部パッケージを使用しているため、Seleniumログはプロキシなしで実行されることを示しています。

0
SANJEEV RAVI

私にとって完璧に機能したアプローチは、AutoITを使用することです。

添付の図に示すようにautoITをインストールして簡単なスクリプトを準備し、baseURLに移動する前に、Runtime.getRuntime()。exec( "\ YOUR_SCRIPT.exe")を使用してtestscriptからスクリプトファイルを実行します。

0
Shrawan