无需访问 Selenium 中的页面即可设置 Cookie

Posted

技术标签:

【中文标题】无需访问 Selenium 中的页面即可设置 Cookie【英文标题】:Setting Cookies without visiting a page in Selenum 【发布时间】:2018-03-25 00:37:39 【问题描述】:

谁能向我解释如何使用带有 selenium 的壁虎驱动程序插件为未访问的域设置 cookie?我一直在尝试设置一个 cookie 以防止看到登录页面,但是 cookie 的域正在重定向,所以我无法通过访问它来设置它,也不知道该怎么做。

我已经尝试过了,但看起来我无法在 selenium 中指定它,因为我无法访问此页面。

Cookie cookie11 = new Cookie("SID",
                  "cookievalue",
                  ".google.com",
                  "/",
                  expiry1,
                  false,
                  false); 

找到了一个名为 Cookies Export/import 的插件,我正在尝试确定它是否可以用于从中导入 cookie。

任何帮助将不胜感激!

【问题讨论】:

Python 的同样问题:How to save and load cookies using Python + Selenium WebDriver - Stack Overflow -- 那里的大多数方法也应该可以工作。 【参考方案1】:

如果您希望使用指定的扩展来执行此操作,我建议您查看How do you use a firefox plugin within a selenium webdriver program written in java? 上的 SO 答案,您应该会很好。

但是,我相信您可以使用addCookie() 方法在不使用扩展的情况下实现此目的。

WebDriver driver = new FirefoxDriver();

Cookie cookie = new Cookie("SID",
              "cookievalue",
              ".example.com",
              "/",
              expiry1,
              false,
              false); 

driver.manage().addCookie(cookie);
driver.get("http://www.example.com/login");

假设您的 cookie 详细信息是正确的,您应该能够通过登录重定向。

另请参阅: WebDriver – How to Restore Cookies in New Browser Window

【讨论】:

我之前浏览过该链接,它只显示了如何加载和指定版本,似乎找不到任何关于我如何在插件中触发操作的信息。我需要设置的 cookie 位于 .google 和 mail.google.com 上,所以当我访问它们时,它们要么已超时,要么已转发。从我能够找到的所有 cookie 必须从实际页面设置,所以不确定这是否会工作.. 我试过无济于事 不幸的是,像这样设置cookie会导致异常org.openqa.selenium.InvalidCookieDomainException: Document is cookie-averse【参考方案2】:

你不能那样做。见https://w3c.github.io/webdriver/webdriver-spec.html#add-cookie

我用规范https://github.com/w3c/webdriver/issues/1238打开了这个问题

如果你想通过这个问题,你需要在没有这些验证的情况下重建浏览器:

以下是对 FireFox(木偶)进行的更改以通过此: https://gist.github.com/nddipiazza/1c8cc5ec8dd804f735f772c038483401

【讨论】:

以上是关于无需访问 Selenium 中的页面即可设置 Cookie的主要内容,如果未能解决你的问题,请参考以下文章

更改地址栏中的完整 URL,无需重新加载页面

Cucumber, capybara and selenium - 无需按钮即可提交表单

如何设置共享文件夹访问无需验证即可进入

无需用户登录即可获取特定页面的公共帖子

来宾用户 Alfresco / 无需登录即可访问

Selenium WebDriver - 如何使用 C# 设置页面加载超时