我正在尝试抓取网站并与之交互。使用 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 登录,因此我没有收到来自服务器的任何返回。