Selenium使用Firefox配置文件

22

我尝试使用Selenium Webdriver和Python在Windows 10系统上进行浏览器自动化操作。但我遇到了这个问题:由Selenium启动的Firefox窗口无法“看到”我已经登录,目标网站将我发送到登录页面。因此,我认为Selenium实际上并没有使用配置文件,而只是使用其副本。

我想知道:

  1. 我的配置文件副本使用的结论是否正确?
  2. 如果问题1的答案是肯定的,有没有一种方法可以真正使用现有配置文件中的所有内容?
  3. 如果我的结论不正确,请证明它,并指向我可以找到有关会话可用信息、Selenium可能无法发送该信息以及如何强制它执行此操作的方向。

编辑:

from selenium import webdriver
fp = webdriver.FirefoxProfile('C:/Users/<user name>/AppData/Roaming/Mozilla/Firefox/Profiles/abc3defghij2.ProfileName')
driver = webdriver.Firefox(fp)
driver.get("https://www.example.com/membersarea")

你在脚本中调用了任何保存的配置文件或浏览器吗?请提供代码。 - murali selenium
为什么要让Selenium“检测”您已经登录,当您可以假设一个“全新”的会话,并通过Selenium本身执行登录呢? - barak manos
我曾经使用Selenium IDE和SelBlocks完成了类似的任务,但是看起来我遇到了其中的一个限制——我需要在登录和未登录时从同一页获取信息。据我所知,使用Selenium IDE可以使用JavaScript打开私人窗口,但无法与其一起工作。 - svgrafov
1个回答

23

虽然Selenium确实使用了一个配置文件的副本,但这不应该引起任何问题。我认为您的问题更多涉及到会话cookie与持久cookie之间的区别。

support.mozilla.org上有一份清单,列出了实际存储在您的个人资料中的信息。请注意,其中包括cookie,但是 会话cookie 并未存储在cookies.sqlite中,这就是Selenium无法重建您的会话的原因,因为它在配置文件中没有出现过。

然而,许多网站在其登录页面上提供“记住我”或“保持登录状态”的选项,如果使用这些选项,则会存储一个持久cookie,从而可以恢复会话。我使用以下脚本来测试gmail账户:

from selenium import webdriver

url = "https://mail.google.com"
fp = webdriver.FirefoxProfile('/Users/<username>/Library/Application Support/Firefox/Profiles/71v1uczn.default')

driver = webdriver.Firefox(fp)
driver.get(url)

当我启用了stay-logged-in选项并登录Gmail后运行此脚本,Selenium可以访问我的收件箱。如果未启用stay-logged-in选项,则会话将在关闭浏览器时销毁,因此Selenium也无法恢复它。

下面的屏幕截图显示会话cookie确实未存储在cookies.sqlite中,因此在使用Selenium时不会出现在配置文件中。

Firefox cookies in cookies.sqlite and firebug


谢谢您的回答!但是,我在Gmail页面上找不到“stay-logged-in”选项,它已经被移除了吗? - skhalymon
8
您可以通过在 Firefox 中使用“about:support”来查找您的活动个人资料文件夹。 - Skandix
这真是你非常友好。 - hoymkot
有一些解决方法。1. 修补本地webdriver,不使用复制文件夹。2. 检索副本,读取初始化驱动程序的fp的__path__属性。3. 手动启动启用了marionette的浏览器,启动一个具有--connect-existing的geckodriver实例,然后使用本地url使用remote_driver进行连接。使用第三个选项,您始终在使用真实配置文件。还要记得删除/tmp/rust和tmp文件,这些是旧配置文件的副本。检索回配置文件的示例在此处:https://dev59.com/WYvda4cB1Zd3GeqPWjpV#33350778 - m3nda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接