首页 > 代码库 > Selenium+Ruby 实例分析 - 京东抢券 2 处理cookie

Selenium+Ruby 实例分析 - 京东抢券 2 处理cookie

上一次给大家介绍了如何登录京东。大家会发现很多时候京东的登录会需要输入验证码,这个时候利用selenium是无法通过图片来获取识别码的。如何获取图片中的识别码是另外一个问题,不在这里讨论。但是我们依然需要解决登录的问题。

大家都知道浏览器是通过cookie来应对HTTP请求的验证的。而Selenium也提供了丰富的关于cookie的处理方法,下面我就通过例子来介绍这些方法。

def store_cookies
  $dr.get("http://www.jd.com/")
  #manual login
  Dir.mkdir "#{File.dirname(__FILE__)}/config.yml" if not File.exist? "#{File.dirname(__FILE__)}/config.yml"
  IO.write("#{File.dirname(__FILE__)}/config.yml", $dr.manage.all_cookies.to_yaml)
end

上面的代码中,第一步是使用webdriver打开京东的首页。这个时候如果需要输入验证码,我们之前的方法就无法成功登录了。这时需要手动登录一次(可以使用pry这个gem来打断点实现操作暂停)。

在登录后的界面,使用 $dr.manage.all_cookies 这个方法来获取当前页面保存的cookies,并把这些cookies以ymal文件的格式保存在配置文件中,方便下次脚本运行时使用。

已经获取了cookie后,在cookie的有效期内可以重复使用。

1 $dr = Selenium::WebDriver.for :chrome
2 $dr.manage.delete_all_cookies
3 cookies = YAML.load(File.open("config.yml"))
4 cookies.each do |cookie|
5   $dr.manage.add_cookie(cookie)
6 end

使用时,首先启动浏览器,然后清空当前浏览器的全部cookies  $dr.manage.delete_all_cookies ,避免干扰。

接着从配置文件中读取保存的cookies。然后把cookies一个个的添加到当前浏览器中。

这个时候再去访问京东的页面,就是已经登录的状态了。

Selenium+Ruby 实例分析 - 京东抢券 2 处理cookie