Selenium:删除 cookies 的问题

2 投票
1 回答
5115 浏览
提问于 2025-04-17 00:05

我们正在使用selenium 2.4和一个Python客户端,在Firefox上运行脚本。
当我们尝试删除所有可见的cookie时,遇到了一个异常:

错误:命令执行失败。请在用户组中搜索错误详情,链接是 https://groups.google.com/forum/#!forum/selenium-users。错误信息是:URI序列格式错误。

我们发现这个问题发生在有一个第三方的cookie时(我们无法更改它),这导致了问题。我们之前在这里问过这个问题,并且有一个关于这个问题的Selenium的未解决bug,但还没有修复。

为了暂时解决这个问题,我们在执行删除所有可见cookie之前,先单独删除了那个有问题的cookie,使用了delete_cookie。不过,在Selenium 2中,我们在使用delete_cookie时也遇到了这个错误。

我们认为可能是因为那个cookie的值(像这样:WSS_GW=V1z%X%X^^^@C@),所以我们尝试在删除cookie之前先把它的值改成0。结果我们得到了这个错误:

错误:无法删除cookie WSS_GW。

我在网上找到的关于这个错误信息的唯一解释是:如果cookie名称中包含%字符,deleteAllVisibleCookies会失败,但我们还有其他包含_的cookie,运行得很好。

有没有人知道可能是什么问题,或者我们该如何解决它?

1 个回答

3

好的,我们找到了这里的两个问题:

  1. 第一个问题是,cookie的值有问题,所以我们收到了“格式错误的URI序列”的错误。为了解决这个问题,我在删除cookie之前,先用create_cookie()把cookie的值设置为0。

  2. 第二个问题是,有两个同名同值的cookie,但它们的域名不同:一个是'domain.com',另一个是'a.domain.com'(而脚本打开的是 http://b.domain.com)。我猜Selenium看到了这两个cookie,在删除一个之后,它仍然看到了一个同名的cookie,所以出现了“无法删除cookie”的错误。为了解决这个问题(在我更改了所有这些cookie的值之后),我使用delete_cookie()删除了域名为'domain.com'的cookie,没有使用递归参数,这样当我调用delete_all_visible_cookies()时,只有一个同名的cookie。

总结一下,我做的事情是:

for domain in ['.domain.com','a.domain.com','b.domain.com']:
        sel.create_cookie("%s=0"%problematic_cookie,"path=/, domain=%s"%domain)
sel.delete_cookie(problematic_cookie,"path=/, domain=.domain.com") # without recurse
sel.delete_all_visible_cookies()

撰写回答