- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我刚开始在 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/
我正在使用 mechanize python 登录网站 combochat2.us用户名 mask3和密码findnext ,但它显示了“没有找到 Mechanize 模块”之类的错误 import
我在我的 rails 应用程序中使用 gem mechanize 来抓取网页数据。 我这样使用它: agent = Mechanize.new document = agent.get("http:/
我正在学习机械。我正在尝试打开一个文本文件,您点击的链接显示 文本 (.prn)我遇到的一个问题是此页面上只有 1 个表单,并且该文件不在表单中。对我来说另一个问题是此页面上有几个文本文件,但它们都具
def return_with_soup(url): #uses mechanize to tell the browser we aren't a bot #and to retri
我正在开发一个项目,使用 python 和 Mechanize 。我有个问题 : Mechanize 返回的页面,有不是的 URLS Mechanize ,如果用户点击它,他们将通过链接 他们自己计算
问题: 解析网站时,有些字符会导致 Mechanize 无法正确解析。 提出的解决方案 解析来自网站的响应以删除这些字符 在 Mechanize 之前尝试解析它。 或者,在 Mechanize 解析网
有一个public class method将字段添加到 Mechanize 表单 我试过了.. #login_form.field.new('auth_login','Login') #login_
我有一些看起来像这样的东西: def self.foo agent = Mechanize.new form = agent.get("link/to/form/url") form.f
我在使用 Mechanize gem 时遇到问题,如何转换 Mechanize::文件 进入 Mechanize::页面 , 这是我的一段代码: **link** = page.link_with(:
我正在尝试抓取一个只能依靠类和元素层次结构来找到正确节点的站点。但是使用 Mechanize::Page#search 返回 Nokogiri::XML::Element,我不能用它来填写和提交表单等
我正在使用 mechanize 来抓取一些网页。 我需要知道什么是 Mechanize 限制? Mechanize 不能做什么? 它可以执行网页中嵌入的javascripts吗? 我可以用它来调用 j
在 WWW::Mechanize 中使用表单方法 my @form = $mech->form_number(1); foreach my $sum_form ( @form ) {
找到以下 HTML 代码: 如何使用 Mechanize 单击没有 id 和 name 的提交按钮? 最佳答案 我已经找到了此类场景的答案,代码如下: agent = Mechanize.new
这个问题不太可能对 future 的访客有帮助;它只与一个小的地理区域、一个特定的时刻或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the hel
我一直在尝试使用以下方法从终端运行 ruby 文件: ruby file_cleanse_auto.rb 但是我从 mechanize 得到一个错误: /Library/Ruby/Site/2.0
这是我拥有的代码: agent = Mechanize.new page = agent.get 'http://google.com' page.save 'google_index.htm' 我怎
for link in br.links(url_regex="inquiry-results.jsp"): cb[link.url] = link for page_link in cb.v
我有一个登录表单的页面。登录后有一些重定向。第一个看起来像这样: #"no-cache=\"set-cookie\"", "content-length"=>"114", "set-cookie"=>
我正在尝试使用基本身份验证访问 API。它适用于 HTTParty,但不适用于 2.7.6 Mechanize。 这是我尝试过的: agent = Mechanize.new agent.log =
我正在尝试使用 Ruby 的 Mechanize gem 提交表单。此表单有一组名为“KeywordType”的单选按钮。各个按钮的名称类似于 rdoAny、rdoAll 和 rdoPhrase。使用
我是一名优秀的程序员,十分优秀!