2

我想使用 cookiejar 登录,并且启动的不是登录页面,而是一个只有在经过身份验证后才能看到的页面。我知道 mechanize 可以做到这一点,但除了现在不为我工作之外,我宁愿在没有它的情况下这样做。我现在有,

import urllib, urllib2, cookielib, webbrowser
from cookielib import CookieJar

username = 'my_username'
password = 'my_password'
url = 'my_login_page'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'my_username' : username, 'my_password' : password})
opener.open(url, login_data)
page_to_launch = 'my_authenticated_url'
webbrowser.open(page_to_launch, new=1, autoraise=1)

我可以登录并将经过身份验证的页面转储到标准输出,或者在不识别 cookie 的情况下启动登录页面,但我无法在登录后启动我想要的页面。感谢帮助。

4

2 回答 2

5

您可以使用 selenium 模块来执行此操作。它启动一个浏览器(chrome、Firefox、IE 等),其中加载了一个扩展程序,允许您控制浏览器。

以下是您将 cookie 加载到其中的方式:

from selenium import webdriver
driver = webdriver.Firefox() # open the browser

# Go to the correct domain
driver.get("http://www.example.com")

# Now set the cookie. Here's one for the entire domain
# the cookie name here is 'key' and it's value is 'value'
driver.add_cookie({'name':'key', 'value':'value', 'path':'/'})
# additional keys that can be passed in are:
# 'domain' -> String,
# 'secure' -> Boolean,
# 'expiry' -> Milliseconds since the Epoch it should expire.

# finally we visit the hidden page
driver.get('http://www.example.com/secret_page.html')
于 2013-05-25T05:50:32.730 回答
1

您的 cookie 没有进入浏览器。

webbrowser没有接受存储在您的CookieJar实例中的 cookie 的设施。它只是一个使用 URL 启动浏览器的通用接口。您要么必须实现一个CookieJar可以在浏览器中存储 cookie(这几乎可以肯定是一项不小的任务),要么使用一个替代库来为您解决这个问题。

于 2013-01-21T19:09:37.540 回答