2016-06-01 3 views
4

enter image description hereКак установить куки в phantomjs, используя селен с python?

Это поднять сообщение об ошибке сказало: «Можно только установить Cookies для текущего домена», но все я просто поставил старые кук in.Sometime я добавляю «правильный» домен, он поднимет Сообщение об ошибке Msgstr "Невозможно установить Cookie". И я тестировал его в Firefox, Firefox также не работает.

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) 

ответ

5

Драйвер PhantomJS не поддерживает все ключи из словаря файлов cookie. Одним из способов преодоления этой проблемы является выбор ключей:

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

Он доступен на веб-сайте StackOverflow, но он не может работать в других website.So у него есть общий способ overcom этот вопрос? – Louise

+0

Он работает с другими веб-сайтами. Обратите внимание, что сначала необходимо установить домен с помощью 'driver.get ('http: // ...')' перед вызовом 'driver.add_cookie' и убедиться, что домен файла cookie совпадает с доменом из текущего стр. –

+0

Да, я запускаю этот код без ошибок, но когда я изменил 'driver.get ('http://stackoverflow.com/')' на 'driver.get ('https://github.com/')', он поднимет 'KeyError: 'expiry''. И он поднимет' 'errorMessage": «Невозможно установить Cookie» на других сайтах, – Louise

3

Необходимо изменить параметр домена для каждого файла cookie. Поле домена должен быть отформатирован следующим образом:

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 Спасибо – HiddenStrawberry

+0

В дополнение к ответу @ HiddenStrawberry выше, точка/период infront домена требуется даже для таких значений, как 'localhost' - как я узнал, трудный путь. Драйверы Chrome и Firefox добавили бы файл cookie с доменом, установленным в 'localhost', но драйвер PhantomJS только успешно добавит файл cookie, если домен был установлен в' .localhost'. –

Смежные вопросы