Serialization watir webdriver cookie jar保存和加载

Serialization watir webdriver cookie jar保存和加载,serialization,cookies,watir,watir-webdriver,Serialization,Cookies,Watir,Watir Webdriver,我很惊讶在这个问题上似乎没有太多的讨论 在中,我可以轻松地从浏览器中读取整个cookie jar,将其存储到一个文件中,并在再次加载该网站的页面之前将其加载到以后的会话/运行中 如何使用watir webdriver实现同样的功能 更新 现在,我确实看到了新的方法browser.cookies.to\u hash 这将把这个问题转化为“如何使用清除和添加等类似加载程序来实现。” 然而,我特别喜欢使用我的服务器可能会被卡住一段时间的早期版本(0.4.1)加载和保存所有cookie。可能是通过Sel

我很惊讶在这个问题上似乎没有太多的讨论

在中,我可以轻松地从浏览器中读取整个cookie jar,将其存储到一个文件中,并在再次加载该网站的页面之前将其加载到以后的会话/运行中

如何使用watir webdriver实现同样的功能

更新

现在,我确实看到了新的方法
browser.cookies.to\u hash
这将把这个问题转化为“如何使用
清除
添加
等类似加载程序来实现。”

然而,我特别喜欢使用我的服务器可能会被卡住一段时间的早期版本(0.4.1)加载和保存所有cookie。可能是通过Selenium驱动程序

browser=Watir::browser.new:firefox
browser.goto'http://google.com'
#保存cookies
已保存的\u cookies=browser.cookies.to\u a
#清理并获得新的饼干
browser.cookies.clear
browser.goto'http://google.com'
#设置新的cookies
browser.cookies.clear
保存的小甜饼。每个人都做保存的小甜饼|
browser.cookies.add(保存的\u cookie[:名称],保存的\u cookie[:值])
结束
应用的循环来重新填充cookie jar,这里有一个解决方案,包括将cookie存储到一个文件中,在以后的Ruby运行中可读。一个直接的
文件.open
数组的写入和读取有一些我不想解决的问题(解析?),但是已经捆绑在Ruby中的YAML对象序列化非常适合这个任务

require 'yaml'

# Save/serialize cookies 
# File.open("ST.cookies.txt", 'w').write $browser.cookies.to_a.to_s 
File.open("ST.cookies.yaml", 'w').write YAML::dump($browser.cookies.to_a)


# Load/deserialize cookies
# $cookies = File.open("ST.cookies.txt", 'r').to_a # returns 1-elem array of single long line, not indiv elements
$cookies = YAML::load(File.open("ST.cookies.yaml", 'r'))
$browser.cookies.clear
$cookies.each do |saved_cookie|
  $browser.cookies.add saved_cookie[:name], 
      saved_cookie[:value],
      :domain => saved_cookie[:domain], 
      :expires => saved_cookie[:expires], 
      :path => saved_cookie[:path], 
      :secure => saved_cookie[:secure]
    end
尽管如此,我们仍在寻找watir webdriver 0.5.x之前的
方法

警告


尚未完全测试,但似乎我必须首先加载cookie应用的URL,然后使用上述方法加载到我的cookie罐中,最后第二次将该URL加载到
$browser
对象。这对于我的案例来说只是一个小小的不便和时间成本,因为我在整个web会话中都呆在同一个域中,但我可以看到这变成了影响几个无关站点的cookie jar的一个真正的难题(对于我使用其他语言和库(如Mechanize)的旧程序来说,这确实是一个期望)。Curl和Wget以及我用于SOAP接口的其他工具通常都允许我在加载站点之前控制我的POST/session/cookie环境。只是想一想。

差不多了。谢谢从明文文件保存和重新加载数组会有一些问题,所以我使用了YAML。下面发布的完整解决方案包括cookie的:domain:expires:path和:secure…可能是我的jar被忽略的原因,我每次都必须创建一个全新的会话!好东西。确实让我想知道有多少人需要或使用诸如.save_cookies和.load_cookies之类的方法,如果它们被添加的话。我已经在其他web驱动库中使用这两个cookie jar函数很多年了——通常是为了延长会话生命周期或在异地操作数据——并且非常希望在Watir规范中看到它们。但我遇到了另一个我觉得需要提醒的问题;上面的注释。FYI watir webdriver现在实现
Cookie#save
Cookie#load
,将Cookie保存/加载到/形成YAML文件