web-dev-qa-db-ja.com

Selenium-URLによる基本認証

私のSelenium-Testchromedriver-2.24)次のステートメントを使用して、基本認証を介して自分のWebページにアクセスしようとしています。

WebDriver driver  = ...;
driver.get("http://admin:admin@localhost:8080/project/");

しかし、Google Chromeはコンソールで次の警告を表示します:

[非推奨] URLに認証情報が含まれているサブリソースリクエスト(例:https://user:pass@Host/)がブロックされています。詳細は https://www.chromestatus.com/feature/5669008342777856 を参照してください。

タグ付きリンクには、サポートが削除されたと記載されています:

サブリソース要求に埋め込まれた資格情報のサポートを削除します。 (削除)

私の質問は今、Seleniumから基本認証する他の方法はありますか?

[〜#〜]ノート[〜#〜]:これは役に立たなかった: Java?)を使用してSelenium WebdriverでHTTP Basic Authヘッダーを処理する方法

7
Lino

これにいくつかの更新がありました link として:

Chromium Issue 435547 サブリソース要求に埋め込まれた資格情報のサポートを削除します。 (削除)

埋め込み認証情報を含むサブリソースのリクエストをブロックする必要があります(例: " http:// ima_user:[email protected]/yay.tiff ")。このようなリソースは、ネットワークエラーとして処理されます。

ただし、基本認証機能は引き続きSelenium 3.4.0で機能しますgeckodriver v0.18.0chromedriver v2.31.488763Google Chrome 60.xおよびMozilla Firefox 53.0からSelenium-Javaバインディング。

これは、URLhttp://the-internet.herokuapp.com/basic_authを開こうとするサンプルコードです。有効な資格情報のセットで機能します。

Firefox:

import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;

public class BasicAuthentication_FF 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
        WebDriver driver =  new FirefoxDriver();
        driver.navigate().to("http://admin:[email protected]/basic_auth");
    }
}

クロム:

import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.chrome.ChromeDriver;
import org.openqa.Selenium.chrome.ChromeOptions;

public class BasicAuthentication_Chrome 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("start-maximized");
        options.addArguments("disable-infobars");
        options.addArguments("--disable-extensions");
        WebDriver driver =  new ChromeDriver(options);
        driver.navigate().to("http://admin:[email protected]/basic_auth");
    }
}
5
DebanjanB

URLによる基本認証は、サブリソースに対してのみブロックされます。したがって、ドメインで引き続き使用できます。

driver.get("http://admin:admin@localhost:8080");
driver.get("http://localhost:8080/project");

小さな拡張機能を作成して、要求されたときに資格情報を自動的に設定することもできます。

options = webdriver.ChromeOptions()
options.add_extension(r'C:\dev\credentials.Zip')

https://Gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46

5
Florent B.

Florent B.のURLで.getを2回呼び出すというアプローチは、少し変更を加えればうまくいきました。 JSの場合:

driver
        .get('http://admin:admin@localhost:8080')
        .then( () => driver.get('http://localhost:8080') )

google chrome ChromeDriver 2.33.506092で62.0.3202.94を使用していて、このアプローチは、Debian linux 9でgeckodriver 0.19.1を使用したfirefox 56.0.2、およびphantomjs 2.1.1と互換性があるようです。

私が起こっていると私が信じているのは、最初の呼び出しがブラウザーによって送信されたAuthorizationヘッダーをセットアップすることです。 2番目の呼び出しは、URLから資格情報を削除し、資格情報はサブリソースに適用されなくなります。 thenは、2つの要求を同期して順序を保証します。

2
Tongfa

chromeおよびremote-debugを介した基本認証の新機能:ここにリンクするだけのため、行き詰まっている人はchromeなどの解決策を見つけることができます。 セレングリッドでのChromeリモートデバッグ

2
Henning Luther