gpt4 book ai didi

python - Python 中的 Mechanize - 提交后重定向不起作用

转载 作者:太空狗 更新时间:2023-10-30 02:13:02 26 4
gpt4 key购买 nike

我刚开始在 Python 中使用 mechanize,但我已经遇到了一些问题。我在 StackOverflow 和 Google 上四处看看,我看到人们说文档很棒,应该很容易让它工作,但我想我不知道如何查找该文档,因为我一直可以找到的是代码示例,它们并没有真正教会我如何做我想做的特定事情。如果有人可以向我指出此类文档,我很乐意自己阅读并解决我的问题。

对于实际问题,我试图通过在表单中​​发送我的用户名和密码信息来登录网站。当信息正确时,我通常会被重定向,但它在 mechanize 中不起作用。

这是我没有得到的部分,因为如果我在调用提交后立即打印页面的html内容,页面会显示一个表明身份验证有效的变量。如果我将密码更改为不正确的密码,html 会显示一条消息“无效凭据”,就像我正常浏览网站时一样。

这是我如何做的代码示例。请记住,这可能是完全错误的,因为我只是想应用我在示例中发现的内容:

import mechanize
import cookielib

# Start Browser
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()

br.set_cookiejar(cj)

br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

br.open('http://www.complexejuliequilles.com/')


for l in br.links(url_regex='secure'):
br.follow_link(l)

br.select_form('form1')

br.form['fldUsername'] = 'myUsername'
br.form['fldPassword'] = 'myPassword'
br.submit()

在此特定示例中,我打开 http://www.complexejuliequilles.com ,然后我点击底部的链接,其中包含文本“管理”,我在表单中输入我的凭据,然后提交。通常,我会被重定向到我所在的第一页,但有更多的按钮只能由管理员使用。我想单击这些链接中的一个以填写另一个表单以添加一个用户列表,其中我有他们的电子邮件地址、姓名等。

我缺少什么简单的东西吗?我想我已经掌握了基础知识,但我对库的了解还不足以找出重定向的问题所在。

最佳答案

http://wwwsearch.sourceforge.net/mechanize/documentation.html

避免直接使用“_http”。名称中的第一个下划线告诉我们开发人员认为它是私有(private)的,您可能不需要它。

In [20]: mechanize.HTTPRefreshProcessor is mechanize._http.HTTPRefreshProcessor
Out[20]: True

在打开 URL 之前放置了一些您并不真正需要的东西。例如:mechanize.Browser() 不是 urllib,它已经为您管理 cookie。您不应避免使用 robots.txt。您可以通过查看哪些处理程序是默认的之前来遵循更多的“约定优于配置”:

mechanize.Browser().handlers

您可能在该列表中有 mechanize.HTTPRedirectHandler(我有),如果没有:

br.set_handle_redirect(mechanize.HTTPRedirectHandler)

for 循环很奇怪,似乎您正在循环(浏览器打开另一个 URL)内更改它的迭代器(打开 URL 内的链接)。我最初以为您想在存在“安全”URL 匹配时递归单击。错误将取决于 links() 生成器的实现方式(可能它遵循固定的 br.response() 实例),但我认为您只想跟随匹配的第一个链接:

In [50]: br.follow_link(url_regex="secure") # No loops

我不知道你需要什么样的重定向/刷新。 JavaScript 改变 window.location.href?如果是这样,除非您自己解析 JavaScript,否则 mechanize 不会这样做。

您可以通过这种方式获取有关上次打开的 URL 的“原始”信息:

last_response = br.response() # This is returned by br.open(...) too
http_header_dict = last_response.info().dict
html_string_list = last_response.readlines()
html_data = "".join(html_string_list)

即使是 JavaScript,您也可以通过在 html_data 中定位它来获取重定向 URL,使用 html_data.find()、正则表达式、BeautifulSoup 等。

PEP8 注意:避免使用孤立的“l”(小写的“L”)作为变量,根据使用的字体和上下文,它可能会被误认为是“one”或“I”(大写的“i”)。您应该改用“L”或其他名称。

关于python - Python 中的 Mechanize - 提交后重定向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11732792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com