Python请求模块: Post and go to next page

标签 python post mechanize twill

我正在使用 python 的请求模块在网页上填写表单。我将表单作为 POST 请求提交,效果很好。我从 POST 中得到了预期的回复。然而,它是一个多步骤的形式;在第一个“提交”之后,站点会在同一页面上加载另一个表单(使用 AJAX)。帖子响应有这个 HTML 页面。现在,我如何使用此响应来填写新页面上的表单?我可以以某种方式将请求模块与 Twill 或 Mechanize 交织在一起吗?

这是 POST 的代码:

import requests
from requests.auth import HTTPProxyAuth
import formfill
from twill import get_browser
from twill.commands import *
import mechanize
from mechanize import ParseResponse, urlopen, urljoin

http_proxy  = "some_Proxy"
https_proxy  = "some_Proxy"

proxyDict = { 
              "http"  : http_proxy, 
              "https" : https_proxy
            }

auth = HTTPProxyAuth("user","pass")
r = requests.post("site_url",data={'key':'value'},proxies=proxyDict,auth=auth)

上面的响应 r 包含提交该表单后生成的新 HTML 页面。这个 HTML 页面还有一个我必须填写的表格。我可以通过某种方式将此 r 发送到 twill 或 mechanize,并使用 Mechanize 的表单填写 API 吗?任何想法都会有帮助。

最佳答案

这里的问题是您需要与页面上的 javascript 进行实际交互。 requests,虽然是一个优秀的库,但不支持 javascript 交互,它只是一个 http 库。

如果您想以有意义的方式与富含 javascript 的网页进行交互,我建议 selenium 。 Selenium 实际上是一个完整的网络浏览器,可以完全像人一样导航。

主要问题是您会发现速度急剧下降。渲染网页比原始 html 请求花费的时间要长得多。如果这对您来说确实是一个大问题,那么您有两个选择:

  • headless :这里有很多选择,但我个人更喜欢 casper 。通过 headless 浏览,您应该会看到浏览时间加快约 3 倍,但每个网站都是不同的。
  • 找到一种通过 http 完成所有操作的方法:大多数非可视网站功能都具有等效的 http 功能。使用 Google 开发者工具网络选项卡,您可以深入了解实际启动的请求,然后在 Python 中复制这些请求。

就您提到的工具而言,mechanizetwill 都无济于事。由于这里的主要问题是 javascript 交互而不是 cookie 管理,并且这些框架都不支持 javascript 交互,因此您会遇到同样的问题。

更新:如果发布响应实际上是新页面,那么您实际上根本没有与 AJAX 交互。如果是这种情况,并且您实际上拥有原始 html,那么您应该简单地模仿表单将发送的典型 http 请求。您在第一个表单上使用的相同方法也适用于第二个表单。您可以从 HTML 响应中获取信息,也可以简单地对连续请求进行硬编码。

关于Python请求模块: Post and go to next page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31106780/

相关文章:

python - 在调用 b.form.submit() 之后,我可以让我的 mechanize.Browser 实例停留在同一页面上吗?

python - 如何选择具有 1 :1 indexes in a datataframe with multiindex? 的值

python - PySpark 根据列名称/字符串条件删除列

http - Go - http.Post 方法返回 400 Bad Request 而 http.Get 似乎工作

post - RestSharp 和 TLS 1.1

ruby - 将 Mechanize 与 Google 文档结合使用

ruby-on-rails - 使用 ruby​​ mechanize 在浏览器中存储登录 session cookie

python - 遍历表单并仅打印表单中包含数据的值

Python:类型错误: 'exp' 对象不可调用

c# - 使用 C# 和 WebRequest 上传图像?