在 Selenium 中使用 urllib2 cookie

Posted

技术标签:

【中文标题】在 Selenium 中使用 urllib2 cookie【英文标题】:Use urllib2 cookie in Selenium 【发布时间】:2013-05-12 02:18:27 【问题描述】:

我正在尝试抓取网站并与之交互。使用 BeautifulSoup,我可以做大部分我想做的事,但不是全部。 Selenium 应该能够处理该部分。我可以使用 Selenium Firefox 插件让它工作。我现在只需要自动化它。我的问题是,我需要与之交互的区域位于登录提示后面,该提示是通过 OpenID 提供程序处理的。

幸运的是,我能够使用这个小书签来获取设置的 cookie。 javascript:void(document.cookie=prompt(document.cookie,document.cookie)); 这让我可以使用 BeautifulSoup 登录解析页面。

这是通过以下代码完成的:

jar = cookielib.FileCookieJar("cookies")
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
opener.addheaders.append(("Cookie","__cfduid=<hex string>; __utma=59652655.1231969161.1367166137.1368651910.1368660971.15; __utmz=59652655.1367166137.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); phpSESSID=<a session id>; __utmb=59652655.1.10.1368660971; __utmc=59652655"))
page = opener.open(url).read()
soup = BeautifulSoup(scrap1)
...parse stuff...

此时,jar 为空,我需要进行最后的交互(单击几个 DIV 元素并验证另一个 DIV 是否已适当更新。但是,我需要将上述 cookie jar 填充到selenium 会话,以便我正确登录。

如何将上面的 cookie 移动到 selenium 知道和识别的东西中?

我试过这样的代码

for c in jar:
    driver.add_cookie('name':c.name, 'value':c.value, 'path':'/', 'domain':c.domain)

但是,由于jar 是空的,这不起作用。有没有办法把这个饼干放进罐子里?由于我使用此 cookie 绕过了 OpenId 登录,因此我没有收到来自服务器的任何返回。

【问题讨论】:

为什么不用Selenium直接登录呢?使用send_keys() 将适当的登录凭据写入适当的元素,然后发送表单。它不那么凌乱了。 python - add cookie to cookiejar 【参考方案1】:

我认为您可能正在倒退。与其将 cookie 传递给 Selenium,不如直接使用 Selenium 执行登录?

例如:

browser = webdriver.Firefox()

username = 'myusername'
password = 'mypassword'

browser.get('http://www.mywebsite.com/')
username_input = browser.find_element_by_id('username') #Using id only as an example
password_input = browser.find_element_by_id('password')
login_button = browser.find_element_by_id('login')

username_input.send_keys(username)
password_input.send_keys(password)
login_button.click()

这样您就不必担心手动收集 cookie。

从这里,您可以获取页面源并将其传递给 BeautifulSoup:

source = browser.page_source
soup = BeautifulSoup(source)

我希望这会有所帮助。

【讨论】:

以上是关于在 Selenium 中使用 urllib2 cookie的主要内容,如果未能解决你的问题,请参考以下文章

百度贴吧无限自动水贴的两种方式,使用requests(urllib2)和selenium两种方式回帖

[Python爬虫] 在Windows下安装PIP+Phantomjs+Selenium

网络爬虫小结

Python爬虫实例使用selenium抓取斗鱼直播平台数据

在 OS X 中使用 Selenium WebDriver 打开和关闭新选项卡

Urllib2 在 python 中使用 Tor