Применение цикла pOdeje для повторного заполнения банки cookie, вот решение, которое включает в себя сохранение файлов cookie в файл, который можно прочитать в последующем запуске Ruby. При прямом File.open
записи и чтении массива были некоторые проблемы, с которыми я не хотел бы обходиться (разбор?), Но Сериализация объекта YAML , уже включенная в Ruby, хорошо подходила для этой задачи.
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
.
CAVEAT
Пока еще не полностью протестирован, но, похоже, мне нужно сначала загрузить URL-адрес, к которому применяются файлы cookie, , а затем загрузить в мой файл cookie, используя вышеуказанный метод, и наконец загрузите этот URL в $browser
объект во второй раз . Это лишь незначительное неудобство и затраты времени для моего случая, когда я остаюсь в одном и том же домене на протяжении всей веб-сессии, но я вижу, что это превращается в настоящую проблему для файлов cookie, затрагивающих несколько не связанных сайтов (как это было на самом деле ожидание моих старых программ с использованием других языков и библиотек, таких как Mechanize). Curl, Wget и вообще другие инструменты, которые я использовал для взаимодействия с SOAP, всегда позволяют мне контролировать свои среды POST / сеанса / cookie до загрузки сайта. Просто мысль.