无法使用 Selenium & Splinter 添加 cookie
Unable to add a cookie using Selenium & Splinter
根据下文,我不确定如何解决这个非常简单的使用场景。
我有一个脚本(我 运行 大约每月一次)在功能上做同样的事情并且使用一个月前工作。
对于开始研究为什么这不起作用的地方的任何指示,我将不胜感激。
$ python3
Python 3.6.1 (default, Mar 23 2017, 16:49:06)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> from splinter import Browser
>>> chrome_options = webdriver.ChromeOptions()
>>> browser = Browser('chrome')
>>> browser.cookies.add({'aaa':'bbb'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/dummyuser/.virtualenvs/my-virtualenv/lib/python3.6/site-packages/splinter/driver/webdriver/cookie_manager.py", line 28, in add
self.driver.add_cookie({'name': key, 'value': value})
File "/Users/dummyuser/.virtualenvs/my-virtualenv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 708, in add_cookie
self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})
File "/Users/dummyuser/.virtualenvs/my-virtualenv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute
self.error_handler.check_response(response)
File "/Users/dummyuser/.virtualenvs/my-virtualenv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unable to set cookie
(Session info: chrome=62.0.3202.94)
(Driver info: chromedriver=2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2),platform=Mac OS X 10.13.1 x86_64)
Florent B. 的答案对我也适用,只是想把它放在正确的地方。
browser.cookies.add
需要在 browser.visit(...)
之后调用
查看 Florent 的评论:
The method browser.cookies.add is bound to the current domain which is undefined in your example. You need to set the domain first with driver.get('http://...')
你应该先打开url,加载cookies,然后你可以打开下一个url和cookies.you也可以这样打开,如果你想打开相同的url:
driver = webdriver.Chrome(executable_path=r'X:\home\xxx\chromedriver.exe')
cookies = pickle.load(open("cookies.pkl", "rb"))
driver.get("https://www.douban.com/")
for cookie in cookies:
driver.add_cookie(cookie)
driver.get("https://www.douban.com/")
希望这对您有所帮助
根据下文,我不确定如何解决这个非常简单的使用场景。
我有一个脚本(我 运行 大约每月一次)在功能上做同样的事情并且使用一个月前工作。
对于开始研究为什么这不起作用的地方的任何指示,我将不胜感激。
$ python3
Python 3.6.1 (default, Mar 23 2017, 16:49:06)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> from splinter import Browser
>>> chrome_options = webdriver.ChromeOptions()
>>> browser = Browser('chrome')
>>> browser.cookies.add({'aaa':'bbb'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/dummyuser/.virtualenvs/my-virtualenv/lib/python3.6/site-packages/splinter/driver/webdriver/cookie_manager.py", line 28, in add
self.driver.add_cookie({'name': key, 'value': value})
File "/Users/dummyuser/.virtualenvs/my-virtualenv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 708, in add_cookie
self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})
File "/Users/dummyuser/.virtualenvs/my-virtualenv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute
self.error_handler.check_response(response)
File "/Users/dummyuser/.virtualenvs/my-virtualenv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unable to set cookie
(Session info: chrome=62.0.3202.94)
(Driver info: chromedriver=2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2),platform=Mac OS X 10.13.1 x86_64)
Florent B. 的答案对我也适用,只是想把它放在正确的地方。
browser.cookies.add
需要在 browser.visit(...)
查看 Florent 的评论:
The method browser.cookies.add is bound to the current domain which is undefined in your example. You need to set the domain first with driver.get('http://...')
你应该先打开url,加载cookies,然后你可以打开下一个url和cookies.you也可以这样打开,如果你想打开相同的url:
driver = webdriver.Chrome(executable_path=r'X:\home\xxx\chromedriver.exe')
cookies = pickle.load(open("cookies.pkl", "rb"))
driver.get("https://www.douban.com/")
for cookie in cookies:
driver.add_cookie(cookie)
driver.get("https://www.douban.com/")
希望这对您有所帮助