2016-08-10 2 views
0

Я ищу что-то похожее на Python's pickle. Я хочу сделать как в этом примере:Groovy pickle alternative

https://www.quora.com/Is-there-a-way-to-keep-the-session-after-login-with-Selenium-Python

сберегательных печенья

import pickle 
from selenium import webdriver 
driver = webdriver.Firefox() 
driver.get('http://www.quora.com') 
# login code 
pickle.dump(driver.get_cookies() , open("QuoraCookies.pkl","wb")) 

погрузочного печенье

import pickle 
from selenium import webdriver 
driver = webdriver.Firefox() 
driver.get('http://www.quora.com') 
for cookie in pickle.load(open("QuoraCookies.pkl", "rb")): 
    driver.add_cookie(cookie) 

Я пробовал много примеров из Интернета без успеха , Я также видел темы здесь.

В заводной случае я:

Set<Cookie> allCookies = driver.manage().getCookies(); 

Переменные allCookies должны сериализовать в файл и десериализации позже.

ответ

1

Сериализация Java здесь. С кредита this post, вот реализация:

import org.openqa.selenium.Cookie 

def loadFile = { filename -> 
    def result = null 

    try { 
     def fis = new FileInputStream(filename) 
     def instream= new ObjectInputStream(fis) 
     result = (Set<Cookie>) instream.readObject() 
     instream.close() 
    } catch (Exception e) { 
     System.out.println(e) 
    } 

    return result 
} 

def saveFile = { set, filename -> 
    try { 
     def fos = new FileOutputStream(filename) 
     def out = new ObjectOutputStream(fos) 
     out.writeObject(set) 
     out.flush() 
     out.close() 
    } catch (IOException e) { 
     System.out.println(e) 
    } 
} 

и программа Пример драйвера:

// ----------------------- main 

if (args.size() >= 2) { 
    def action = args[0] 
    def file = args[1] 

    if (action == "write") { 
     def cookies = new HashSet<Cookie>() 
     cookies << new Cookie("Toronto", "Canada") 
     cookies << new Cookie("London", "UK") 
     cookies << new Cookie("Paris", "France") 

     saveFile(cookies, file) 
    } else if (action == "read") { 
     def cookies = loadFile(file) 
     cookies.each { cookie -> 
      println "${cookie.name} ${cookie.value}" 
     } 
    } else { 
     println "Unknown action: " + action 
    } 
} else { 
    println "Usage: groovy CookieManager.groovy [read|write] filename" 
} 

Пример использования (а) все выше кода в том же сценарии и (б) при условии, что client-combined-3.0.0-beta2-nodeps.jarfrom here находится на пути к классам:

bash$ groovy CookieManager.groovy write set.dat 
bash$ groovy CookieManager.groovy read set.dat 
London UK 
Toronto Canada 
Paris France 
+0

я получаю эту ошибку, когда я пытаюсь загрузить файл: – Vanko

+0

java.lang.ClassNotFoundException: org.openqa.sele nium.Cookie Я попытаюсь выяснить, почему я думаю, что это причина: http://stackoverflow.com/questions/25273658/java-classnotfound-exception-when-working-with-objectinputstream-and-arraylist – Vanko

+0

I обновили ответ, отметив, что Selenium jar (для Cookie) должен находиться на пути к классам. Я думал, это очевидно. Обратите внимание, что я никогда не использовал Selenium, поэтому я не смогу объяснить гораздо больше, чем это. –