python和mechanize.open()
我有一些使用mechanize和密码保护站点的代码。我可以很好地登录并获得我期望的结果。然而,一旦我登录,我不想“点击”链接,我想通过URL列表进行迭代。不幸的是,每次.open()调用都会直接返回登录页面,这是我在注销或尝试使用其他浏览器登录时所期望的行为。这让我相信这是某种饼干处理方式,但我不知所措python和mechanize.open(),python,mechanize,Python,Mechanize,我有一些使用mechanize和密码保护站点的代码。我可以很好地登录并获得我期望的结果。然而,一旦我登录,我不想“点击”链接,我想通过URL列表进行迭代。不幸的是,每次.open()调用都会直接返回登录页面,这是我在注销或尝试使用其他浏览器登录时所期望的行为。这让我相信这是某种饼干处理方式,但我不知所措 def main(): browser = mechanize.Browser() browser.set_handle_robots(False) # The belo
def main():
browser = mechanize.Browser()
browser.set_handle_robots(False)
# The below code works perfectly
page_stats = login_to_BOE(browser)
print page_stats
# This code ALWAYS gets the login page again NOT the desired
# behaviour of getting the new URL. This is the behaviour I would
# expect if I had logged out of our site.
for page in PAGES:
print '%s%s' % (SITE, page)
page = browser.open('%s%s' % (SITE, page))
page_stats = get_page_statistics(page.get_data())
print page_stats
这不是一个答案,但它可能会引导你走向正确的方向。尝试使用以下语句的组合来启用Mechanize的广泛调试功能:
browser.set_debug_redirects(True)
browser.set_debug_responses(True)
browser.set_debug_http(True)
这将提供大量的HTTP信息,我在开发我唯一的基于Mechanize的应用程序时发现这些信息非常有用
我应该注意到,我在我的应用程序中所做的与您在问题中所展示的没有什么不同(如果有的话)。我以相同的方式创建浏览器对象,然后将其传递给此登录函数:
def login(browser):
browser.open(config.login_url)
browser.select_form(nr=0)
browser[config.username_field] = config.username
browser[config.password_field] = config.password
browser.submit()
return browser
然后,我可以使用浏览器打开需要身份验证的页面。打开(url),所有cookie处理都将为我透明地自动处理。而不是为每个链接使用:
browser.open('www.google.com')
完成初始登录后,请尝试使用以下命令:
browser.follow_link(text = 'a href text')
我猜调用open就是重置cookies的原因。威尔
你的建议为我指明了正确的方向
我使用过的每个web浏览器都会对以下内容做出正确的响应:
http://www.foo.com//bar/baz/trool.html
因为我讨厌错误地连接东西,所以我的站点变量为“”
此外,所有其他URL都是“/bar/baz/trool.html”
我对open的调用结果是
.open('http://www.foo.com//bar/baz/trool.html)
而且mechanize浏览器显然不像“真正的”浏览器那样有说服力。Apache不喜欢URL。第一个打开的调用是否有效,所有顺序调用是否都会命中登录页,还是所有调用都会命中登录页?第一个调用在login_to_BOE()调用中处理,其工作方式完全符合预期。for循环中的所有调用都返回登录页面(添加了一个参数,指示成功登录时要重定向到的url)。