python mechanize 处理两个同名参数

2024-02-01

我正在登录一个页面,其中奇怪地有一个名为的表单输入login_email和两个表单输入称为login_password。我需要设置两者的值,但直接调用form['login_password']抛出错误:

  File "/Library/Python/2.7/site-packages/mechanize/_form.py", line 3101, in find_control
    return self._find_control(name, type, kind, id, label, predicate, nr)
  File "/Library/Python/2.7/site-packages/mechanize/_form.py", line 3183, in _find_control
    raise AmbiguityError("more than one control matching "+description)
mechanize._form.AmbiguityError: more than one control matching name 'login_password'

我只需要找到一种提交方式form['login_password'] = "Password" and form['login_password'] = "monkeybutler"同时。我没有看到变量Browser对象更改 POST 数据参数。

有什么建议么? 这是我尝试过但没有成功的方法:

# Select the first (index zero) form
br.select_form(nr=0)

# Let's search
br.form['login_email'] = '[email protected] /cdn-cgi/l/email-protection'

#my_fields = br.form.fields.select
#my_fields[0].login_password = "Password"
#my_fields[1].login_password = "123qwerty"
br.form['login_password']= ['Password','123qwerty']

br.submit()

如果你面对两个具有相同名称、id 等的字段,你必须使用一些解决方法,尽管它不是很干净

首先,我为该示例定义了一个简单的 html 文件,因为我不知道您使用的 URL:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>foo</title>
</head>
<body>

<h1>bar</h1>

<form action="input_text.htm">
  <p>name:<br><input name="name" type="text" size="30" maxlength="30"></p>
  <p>sec_name:<br><input name="sec_name" type="text" size="30" maxlength="40"></p>
  <p>sec_name:<br><input name="sec_name" type="text" size="30" maxlength="40"></p>
</form>

</body>
</html>

之后,我可以使用以下 python 代码快速而肮脏地将值插入到这些字段中:

>>> import mechanize
>>> browser = mechanize.Browser()
>>> browser.open("file:///home/foo/index.html")
<response_seek_wrapper at 0x229a7e8 whose wrapped ...
>>> browser.select_form(nr=0)
>>> name = 'foo'
>>> for control in browser.form.controls:
...     if control.name == 'sec_name':
...             control.value = name
...             name = 'bar'
... 
>>> for control in browser.form.controls:
...     print control
... 
<TextControl(name=)>
<TextControl(sec_name=foo)>
<TextControl(sec_name=bar)>
>>> 

这不太好,但很有效。希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python mechanize 处理两个同名参数 的相关文章

随机推荐

  • PHP 对象生命周期

    我正在使用 PHP 5 2 如果我在一页上new一个对象 这个对象什么时候会被销毁 当用户转到另一个 php 页面时 对象是否会自动销毁 或者我需要显式调用 destructor 它将在页面加载结束时被破坏 从内存中卸载 或者如果您之前取消
  • SimpleXML 与 DOMDocument 性能对比

    我正在使用 SimpleXML 类构建 RSS 解析器 我想知道使用 DOMDocument 类是否会提高解析器的速度 我正在解析一个至少有 1000 行的 rss 文档 并且我使用了这 1000 行中的几乎所有数据 我正在寻找需要最少时间
  • 如何在 WPF 应用程序中为页面创建模式对话框?

    我有一个 WPF 窗口 其中有一个托管框架的控件 在该框架中我显示不同的页面 有没有办法使对话框仅在页面上模式化 当我显示对话框时 不应单击页面上的任何控件 但应该可以单击不在页面上的同一窗口上的控件 如果我对你的信息的解释是正确的 那么你
  • 正则表达式和 unicode

    我有一个脚本可以解析电视剧集的文件名 例如 show name s01e02 avi 获取剧集名称 来自 www thetvdb com API 并自动将它们重命名为更好的名称 节目名称 01x02 avi 该脚本工作正常 直到您尝试在具有
  • 检查 URL 是否有 http:// 前缀

    在我的应用程序中 当用户添加对象时 还可以添加该对象的链接 然后可以在 webView 中打开该链接 我尝试保存不带 http 前缀的链接 然后在 webView 中打开它 但无法打开它 在webView开始加载之前 有没有办法检查保存的U
  • 在 Dart 中发送 SMTP 电子邮件

    我查看了 API 文档和语言指南 但没有看到任何有关在 Dart 中发送电子邮件的内容 我也检查了这个谷歌群组帖子 https groups google com a dartlang org forum topic misc 5YNvrm
  • 如何通过 JSON 文件为curl 传递有效负载?

    我可以通过以下方式成功创建一个地方curl执行以下命令 curl vX POST https server api v1 places json d auth token B8dsbz4HExMskqUa6Qhn place name Fu
  • 为复杂的跨平台程序创建安装程序

    我正在为一堆相对复杂的桌面应用程序绘制一个应用程序部署过程 我们有本机应用程序和 Java 应用程序 因此部署必须能够检查 JRE 是否存在并在需要时安装它 某些应用程序依赖于特殊硬件 因此部署还必须能够启动必要的驱动程序安装程序 一些应用
  • 使用 AsyncTask 时应用程序挂起并暂停所有线程

    我正在尝试使用AsyncTask类来获取网站的内容 logcat 告诉我W art Suspending all threads took 15 or any other number ms反复 我的应用程序被冻结 直到日志消息打印完成 日
  • 在 Powershell 中设置 InheritanceFlags 与 PropagationFlags

    我正在尝试找到 InheritanceFlags 和 PropagationFlags 的正确组合 以便我的新文件夹不会继承之前文件夹的权限 而是将权限传播到新文件夹中包含的文件夹 文件 我尝试交换我下面有两个 但这只给了新文件夹与上面的文
  • 将三个不同的列合并为 R 中的日期

    现在 我在 R 的数据文件中有 3 个单独的列 分别为年 月和日 如何将这三列合并为一列并使 R 理解它是日期 这是现在的样子 year mon day gnp 1947 1 1 238 1 1947 4 1 241 5 1947 7 1
  • Elasticsearch 在显示 t: failed to read local state , exiting 后崩溃

    我是 Elasticsearch 的新手 我在本地只运行一个节点 到目前为止 它运行良好 现在一启动就崩溃了 错误堆栈如下 C MyApps elasticsearch6 5 1 elasticsearch oss 6 5 1 elasti
  • 在 bash 中从占据终端整个宽度的破折号字符绘制一条水平线

    我需要一个命令来在终端中绘制一条水平 线 该线必须恰好等于终端长的宽度 无论当前终端宽度如何 并且由破折号字符组成 尽管也可以使用水平线的 unicode 符号 如果能上色就更好了 我需要像这样使用它 echo some text draw
  • WCF:OperationContext.IncomingMessageProperties.Via 返回错误的 URI

    我在 IIS 中托管 WCF 服务 我在 IIS 中为该站点设置了多个主机名绑定 但是 当向任何非默认绑定发出请求时 OperationContext IncomingMessageProperties Via 属性不会报告正确的 url
  • 如何加载共享库而不加载其依赖项?

    说我有一个图书馆libfoo so 1 这取决于 根据ldd on libbar so 1 然而 libbar so 1目前不可用 我的应用程序需要调用一个函数libfoo so 1这不需要libbar so 1 at all 有没有办法加
  • 局部变量的内存可以在其作用域之外访问吗?

    我有以下代码 include
  • 使用Servlet API,如何确定请求是HTTP/1.0还是HTTP/1.1?

    我正在修复一个错误 该错误仅在客户端使用 HTTP 1 0 并且是在防火墙后面秘密地进行 Internet Explorer 代理 时才会显现出来 详细信息在这里 https issues apache org jira browse TA
  • 获取日期中的小时和分钟 (HH:MM)

    我只想得到hh mm从日期 我怎样才能得到这个 我已经尝试过这个 CONVERT VARCHAR 8 getdate 108 只需使用前 5 个字符 SELECT CONVERT VARCHAR 5 getdate 108
  • 在 Java 中,在被调用方法之前和之后运行方法

    我正在尝试编写一个 Java 程序 以便在调用方法A 首先是一个名为methodBeforeA 被调用 然后方法A 执行后 另一个方法被调用命名 方法AfterA 这与 Junit 使用注释 使用 Before Test After 所做的
  • python mechanize 处理两个同名参数

    我正在登录一个页面 其中奇怪地有一个名为的表单输入login email和两个表单输入称为login password 我需要设置两者的值 但直接调用form login password 抛出错误 File Library Python