【发布时间】:2021-06-12 07:34:18
【问题描述】:
我正在使用Selenium WebDriver 来启动特定的 Firefox 配置文件。通常,Selenium 会创建一个模仿现有 Firefox 配置文件的 FF 临时安装,然后在调用 webdriver.close() 后将其删除。
但是,我需要能够通过 Selenium 启动 Firefox WebDriver 并为以后的会话保留某些登录 cookie,这样我每次登录时都不会被要求输入密码和/或验证码帐户。我已经看到了一些解决这个问题的方法,但每种方法都有自己的问题:
1) 识别 Selenium 创建的临时文件,并将 cookies.sqlite 复制到原始 FF Profile 安装文件夹中。我看到这种方法的问题是我同时启动了许多 Selenium 实例,那么我将如何确定哪个临时文件夹对应于特定的 WebDriver 会话?另外,是否可以将cookie附加到原始安装文件而不是覆盖原始文件?
2) 一个user suggested 来电:
Set<Cookie> allCookies = driver.manage().getCookies();
在调用 driver.close() 之前,然后通过调用将 cookie 添加到下一个 WebDriver 会话:
for(Cookie cookie : allCookies)
{
driver.manage().addCookie(cookie);
}
我看到这种方法的问题是我需要长期(即永远)保留 cookie,并且我无法将所有会话的 cookie 存储在内存中。即使可以,当程序存在或主机关闭时,cookie 数据也会丢失。此外,getCookies() 仅返回当前域的 cookie,而 addCookie() 只允许添加域与当前 URL 的域相同的 cookie。因此,在获取或设置 cookie 时,首先访问正确的 URL 很重要,正如 by one commenter 所指出的那样。我想在新的 FF 会话启动时立即从多个域加载 cookie。
3) 另一个选项可能是首先阻止 Firefox 在新位置创建临时文件(即重定向到原始 FF 安装目录)并防止 FF 在退出时删除临时文件.这样的事情可行吗?
我见过其他一些方法,但它们要么仅解决与 Chrome(不是 Firefox)或 Python 相关的问题,要么存在上述缺陷之一。
在Java + Firefox中可以用什么方法来解决这个问题?
谢谢!
【问题讨论】:
标签: java selenium selenium-webdriver firefox cookies