gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:09:35 25 4
gpt4 key购买 nike

我正在使用 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/

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