2

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

我现在有这个代码

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

我想要这样的东西

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

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

在此处输入图像描述

虽然我想要这样的东西

在此处输入图像描述

你可以看到Host:在我的情况下是空的,在另一种情况下它被替换,Domain: 这就是我想要实现的,将 cookie 域设置为.mydomain.com

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

4

2 回答 2

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 页面)。

于 2013-09-09T07:10:06.793 回答
3

您可以使用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
}
于 2013-09-09T07:12:47.807 回答