使用Ruby的selenium-webdriver创建一个特定于域的“.site.com”cookie

时间:2013-09-09 06:25:46

标签: ruby cookies selenium

我正在尝试使用域名,而不是主机或整个网站创建Cookie。

我现在有了这个代码

driver.manage.add_cookie(:name => 'test', :value => 'testvalue', :path => '/', :secure => false)

我想要这样的东西

name=test
value=testvalue
domain=.site.com
path=/

我在firefox cookie对话框中得到了这样的结果

enter image description here

虽然我想要这样的东西

enter image description here

您可以看到Host:在我的情况下为空,在另一种情况下,它会被Domain:替换,这就是我想要实现的目标,将Cookie域设置为.mydomain.com < / p>

我希望JavaScript能够实现这一点,以便能够读取特定于域的cookie,因为它无法读取当前域范围之外的内容。

2 个答案:

答案 0 :(得分:5)

请尝试以下操作:

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.get('http://eu.httpbin.org') # <-- required.
driver.manage.add_cookie(name: 'test', value: 'testvalue', path: '/', domain: '.httpbin.org')
driver.get('http://eu.httpbin.org/cookies') # eu.httpbin.org
puts driver.page_source
# => ...
# {
#   "cookies": {
#     "test": "testvalue"
#   }
# }
# ...
driver.get('http://httpbin.org/cookies') # httpbin.org
puts driver.page_source
# => ...
# {
#   "cookies": {
#     "test": "testvalue"
#   }
# }
# ...

注意:在添加Cookie之前,您必须转到相同的域页面(html页面)。

答案 1 :(得分:4)

您可以使用 JavaScript

执行以下操作
require "selenium-webdriver"
require "awesome_print"

driver = Selenium::WebDriver.for :firefox
driver.navigate.to "http://example.com"

COOKIE_DOMAIN = <<-eotl
var cookieName = arguments[0];
var cookieValue = arguments[1];
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = cookieName +"=" + encodeURIComponent(cookieValue)
                  + ";expires=" + myDate 
                  + ";domain=.example.com;path=/";
eotl

driver.execute_script(COOKIE_DOMAIN,'test','testvalue')
ap driver.manage.cookie_named('test')

<强>输出

{
       :name => "test",
      :value => "testvalue",
       :path => "/",
     :domain => ".example.com",
    :expires => #<DateTime: 2014-09-09T07:43:12+00:00 ((2456910j,27792s,999999924n),+0s,2299161j)>,
     :secure => false
}