Selenium+Ruby 实例分析 - 京东抢券 2 处理cookie
Posted BatkidDong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章
爬虫(十七):Scrapy框架 对接selenium爬取京东商品数据