Webdriverで開く前にリンクにCookieを追加しようとしていますが、このエラーが発生し続けます:
org.openqa.Selenium.UnableToSetCookieException:Cookieを設定できません(警告:サーバーはスタックトレース情報を提供しませんでした)
以下の私のコードを見つけてください:
System.setProperty("webdriver.Edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example
関連するソリューションを手伝ってください。
サイトに移動する前にCookieを作成しています。ドメインwww.example.comでCookieを作成しようとしている場合、そのドメインの一部のページに移動し、Cookieを作成してからテストを開始します。
しばらく前に読んだことから、これを行う最良の方法は、ドメインには存在しないとわかっているページに移動することです。 www.example.com/this404pageから、Cookieを作成します。エラーページであり、多くのコンテンツが含まれていないため、読み込みがずっと速くなります。 404ページでCookieを作成したら、テストを開始します。
WebDriverの仕様では、Cookieを設定しようとしているドメインにブラウザを設定する必要があるため、これを行うことはできません。
前述の回避策は、Cookieを設定する前にページに移動することです。しかし、それはいくつかの問題を引き起こします:
これにより、残念ながら次の2つの主要なユースケースが防止されます。
ウェブドライバーの仕様では、明らかにこれを考慮する必要があります。私はここで問題を開きました:
https://github.com/w3c/webdriver/issues/1238
投票してください。すべてのブラウザは、これを処理する方法を開始する必要があります。
最初にURLに移動してからCookieを追加し、以下のコードを試してください。
System.setProperty("webdriver.Edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example
コードをこれに置き換えます:
System.setProperty("webdriver.Edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
ドメインに移動する前にCookieを追加することは、ドメインレスCookieと呼ばれますが、これは不可能だと思います。
URLの前にCookieをドロップする方法を見つけていませんが、以下のシナリオがあなたを助けるかもしれないと思います。
これがより簡単な場合に備えて、ファクトリクラスを作成する必要はなく、サイトからルートページを読み込むだけです(Cookieを要求しませんでした)。
最初に上記のようにCookieを収集します
pickle.dump(driver.get_cookies(), open("ChromeCookies.pkl", "wb"))
次に、Cookieを必要としないWebサイトのルートを取得します(私の場合)
driver.get(url_root)
次に、Cookieロードを実行します
for cookie in pickle.load(open("ChromeCookies.pkl", "rb")):
driver.add_cookie(cookie)
次に、実際にアクセスしたいページに移動します
driver.get(url_not_root_demanding_cookie_which_is_now_there)
このアプローチに問題がある場合は投稿してください