2016-06-01 3 views
4

enter image description hereWie setze ich Cookies in Phantomjs mit Selen mit Python?

Es hebt eine Fehlermeldung des „Cookies nur für die aktuelle Domäne einstellen“, aber alles, was ich habe nur die alten Cookies gesetzt wird in.Sometime ich die ‚richtige‘ Domäne hinzufügen, wird Fehlermeldung erhöhen "Es konnte kein Cookie gesetzt werden". Und ich habe es in Firefox getestet, Firefox funktioniert auch nicht.

from selenium import webdriver 
driver = webdriver.PhantomJS(executable_path=phantompath) 
driver.get('http://stackoverflow.com/') 
driver.get_screenshot_as_file('1.png') 
cookies = driver.get_cookies() 
driver.delete_all_cookies() 
driver.get_cookies() 
for cookie in cookies: 
    driver.add_cookie(cookie) 

Antwort

5

Der PhantomJS-Treiber unterstützt nicht alle Schlüssel aus dem Cookie-Wörterbuch. Eine Möglichkeit, dieses Problem zu beheben, besteht darin, die Schlüssel auszuwählen:

from selenium import webdriver 

driver = webdriver.PhantomJS() 
driver.get('http://stackoverflow.com/') 

cookies = driver.get_cookies() 

driver.delete_all_cookies() 

for cookie in cookies : 
    driver.add_cookie({k: cookie[k] for k in ('name', 'value', 'domain', 'path', 'expiry')}) 
+0

Es ist in Stackoverflow Website zur Verfügung, aber es kann in anderen website.So nicht funktioniert es einen gemeinsamen Weg hat, dieses Problem overcom: Die Domain Feld muss wie folgt formatiert werden? – Louise

+0

Es funktioniert mit anderen Websites. Beachten Sie, dass Sie zuerst die Domäne mit 'driver.get ('http: // ...')' festlegen müssen, bevor Sie 'driver.add_cookie' aufrufen, und stellen Sie sicher, dass die Domäne des Cookies mit der des aktuellen übereinstimmt Seite. –

+0

Ja, ich führe diesen Code ohne Fehler aus, aber als ich 'driver.get ('http://stackoverflow.com/')' zu 'driver.get ('https://github.com/')' 'ändere, Es wird 'KeyError: 'Ablauf' ausgelöst. Und es wird" errorMessage ":" Kann Cookie nicht setzen "in anderen Websites, – Louise

3

Sie müssen den Domänenparameter für jeden Cookie ändern.

driver = webdriver.PhantomJS() 
driver.get('http://www.baidu.com') 
driver.delete_all_cookies() 

for item in cookie_dictionary: 
    driver.add_cookie({ 
     'domain': '.baidu.com', # note the dot at the beginning 
     'name': item['name'], 
     'value': item['value'], 
     'path': '/', 
     'expires': None 
    }) 

driver.get('http://www.baidu.com') 
+0

@Pedro Castilho Danke – HiddenStrawberry

+0

Als Ergänzung zur oben genannten Antwort von @ HiddenStrawberry ist der Punkt/Punkt vor der Domäne sogar für Werte wie "localhost" erforderlich - wie ich es auf die harte Tour herausgefunden habe. Chrome- und Firefox-Treiber würden den Cookie mit der Domänengruppe "localhost" hinzufügen, aber der PhantomJS-Treiber fügt das Cookie nur dann erfolgreich hinzu, wenn die Domäne auf '.localhost' gesetzt wurde. –