使用 Python 请求选择表单

2024-01-03

我想使用一个能够填写表单和处理重定向的 python 库:

  1. “主页”页面有一个表单{'username':'user', 'password':'pass'}
  2. “重定向”页面将我带到一个新页面
  3. “新”页面有一个指向最终页面的链接
  4. “最终”页面有一个表单{'Field 1':'Data 1', 'Field 2':'Data 2'}

我想进入“最终”页面并填写表格。我已经浏览了 SO 中的每一篇文章python 请求 /questions/tagged/python-requests,阅读 API 文档和整个用户指南。

我已经能够使用 mechanize 填写“主页”页面表单:

import mechanize
# Fill out Log In form
br = mechanize.Browser()
br.open('http://www.yourfavoritesite.com')
br.select_form(nr=0)
br['username'] = 'user'
br['password'] = 'pass'
br.submit()

此外,在禁用网页上的重定向后,我已经能够使用 mechanize 填写“新”页面表单:

# Click link
br.find_link(text='Admin')
req = br.click_link(text='Admin')
br.open(req)

# Fill out Final form
br.select_form(nr=0)
br['Field 1'] = 'Data 1'
br['Field 2'] = 'Data 2'
br.submit()

如果我不禁用重定向并且页面重定向,会发生什么情况是我无法进入“新”页面,并且当我尝试填写表单时出现以下错误:

File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 524, in select_form
     raise FormNotFoundError("no form matching "+description)
mechanize._mechanize.FormNotFoundError: no form matching nr 0

我听说 Python Requests 非常简单,我想使用这个库,假设我可以做一些事情:

import requests
# Fill out Log In form
data = {'username':'admin', 'password':'pass'}
r = requests.get('http://www.yourfavoritesite.com', allow_redirects=True)
r = requests.put(r.url, data=data)

# Follow redirect to "new" page

# Click link
# I haven't heard of this feature in requests

# Fill out Final form
data = {'Field 1':'Data 1', 'Field 2':'Data 2'}
r = requests.put(r.url, data=data)

我知道这已经过时了,但我相信您正在寻找的答案requests是(显然)不是get, but post.

from: http://docs.python-requests.org/en/latest/user/quickstart/#more-complicated-post-requests http://docs.python-requests.org/en/latest/user/quickstart/#more-complicated-post-requests

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print r.text
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 请求选择表单 的相关文章

随机推荐

  • SpriteKit场景切换时的内存问题

    Ok so awhile back in testing I had a random crash with no error and I have no clue why So i went into analyze things and
  • npm 如何/为什么建议不要以 root 身份运行?

    简而言之 首先 为什么npm http npmjs org 建议它只能以非 root 身份运行 我非常不相信其他所有包管理器 apt yum gem pacman 要求 sudo 是错误的 其次 当我遵循他们的建议 并运行npm insta
  • :this 在 Ruby on Rails 中意味着什么?

    我是 Ruby 和 Ruby on Rails 世界的新手 我已经阅读了一些指南 但我在使用以下语法时遇到了一些问题 我认为使用 conditionRuby 中使用语法来定义具有某种访问器的类属性 例如 class Sample attr
  • 将 Flutter 小部件定位到屏幕外

    正如标题所提到的 我试图将我的小部件放置在屏幕之外 目前我已经设法将小部件图像偏移到屏幕之外 但这不是我期望的结果 屏幕外的图像在状态栏上仍然可见 这就是它的样子 这就是我期望的样子 用 adobe XD 设计 Widget build B
  • Rails 3 的 A/B 框架?

    有没有像 ABingo 或 Vanity 这样的东西可以在 Rails 3 中运行 我知道有 Google 网站优化器和可视化网站优化器 但我需要更多的功能来确定显示的内容以及跟踪的内容 而这些功能超出了它们的能力 如果没有 我什至会考虑相
  • 为什么简单的 Dockerfile 给出“权限被拒绝”?

    我正在学习将 Docker 与 ROS 结合使用 我对以下错误消息感到惊讶 FROM ros kinetic robot xenial create non root user ENV USERNAME ros RUN adduser in
  • 如何在 Entity Framework Core 中调用带有多个表联接的存储过程?

    我必须调用一个从多个表中选择记录的存储过程 我已尝试以下代码 但它为实体类以外的其他表中的列返回 null private async Task
  • 子+父参考SQL

    我正在尝试编写一个查询来显示项目的名称和父项目的名称 但到目前为止还没有提供正确的方法 CREATE TABLE project p id NUMBER 6 project name VARCHAR2 30 client id NUMBER
  • 如何使用div代替表格

    我正在尝试创建以下表格布局 但我想使用 DIV 而不是 TABLE CELL1 CELL2 CELL3 我希望所有单元格的高度由其内容设置 即没有高度 样式 我尝试过在 cell1 上使用 float left 但似乎无法让单元格 2 和
  • Mac OS X Java 更新的源代码[重复]

    这个问题在这里已经有答案了 Java for Mac OS X 10 6 Update 3 升级到 java 1 6 0 22 但是 它们不包含源代码或 JavaDoc 有谁知道苹果是否提供了源代码 如果是 在哪里可以找到它 我想将源代码附
  • 增加值并将其设置为 onClick 事件的 var

    我面临着一个非常奇怪的问题 导致感觉就像 无论你如何 首先这是代码 renderImages gt let i 0 const arr https truffle assets imgix net pxqrocxwsjcc 6OcJeUMa
  • MySQL If Date 语句?

    有没有办法通过 mysql 查询返回 true 或 false 我有一张桌子 id start 4 2012 03 01 00 00 00 8 2012 01 20 00 00 00 我也想回来TRUE如果当前日期大于开始日期并且FALSE
  • 有没有办法允许用户提交 html 内容,同时仍然启用模型验证?

    我需要允许用户在其文本输入中提交包含 html 的表单值 这是一个面向内部的应用程序 因此这样做相当安全 我已经成功地使用了 ValidateInput false 有关方法的属性 但这会抑制all对相关方法 视图模型进行模型验证 但我只想
  • 如何像 jsfiddle.net 中那样调整多个相邻文本区域的大小?

    如何像jsfiddle net网站那样通过在区域1 2和3上拖动鼠标来调整textarea的大小 我的代码是 HTML div fieldset div class window top A div div class handler ho
  • 正则表达式仅匹配字符串以目标结尾的情况

    我需要一个正则表达式 它仅与以我要查找的目标结尾的字符串匹配 我需要找到具有特定扩展名的文件 问题是该扩展名也出现在其他文件中 例如我有两个文件名为 B82177 2014 07 08T141507758Z ccf and B82177 2
  • iPhone SDK WebRTC 集成错误

    安装时WebRTC我的 iOS 项目出现以下错误 Undefined symbols for architecture i386 OBJC CLASS RTCICECandidate referenced from objc class r
  • 没有 if-else 语句的一维卷积(非 FFT)?

    我编写了一个简单的串行一维卷积函数 如下 我也在尝试 GPU 卷积实现 这主要是出于我自己的好奇心 我正在尝试了解各种非 FFT 实现策略之间的性能权衡 避免分支对于我的 GPU 卷积实验非常重要 因为分支在 Nvidia GPU 上的成本
  • JavaScript 中的二进制到字符串

    我创建了一个 JavaScript 程序来将字符串转换为二进制 Input StackOverflow Output 1010011 1110100 1100001 1100011 1101011 1001111 1110110 11001
  • 将图表添加到 d3 中的工具提示

    我正在尝试向我的工具提示添加一个简单的条形图 它由两个变量组成 男性和女性 我希望有人能够帮助我将其放入工具提示中 而不是将其附加到当前附加的位置 我已经给了它一个要附加的特定区域 以便我知道它实际上正在显示 确实如此 但我不知道如何将其放
  • 使用 Python 请求选择表单

    我想使用一个能够填写表单和处理重定向的 python 库 主页 页面有一个表单 username user password pass 重定向 页面将我带到一个新页面 新 页面有一个指向最终页面的链接 最终 页面有一个表单 Field 1