在Selenium中使用urllib2 cookie

时间:2013-05-17 01:38:44

标签: python selenium beautifulsoup urllib2

我正在尝试抓取并与网站互动。使用BeautifulSoup,我可以做我想要的,但不是全部。硒应该能够处理那部分。我可以使用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登录,因此我没有收到任何来自服务器的信息。

1 个答案:

答案 0 :(得分:3)

我认为你可能会倒退。而不是将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)

我希望这会有所帮助。