我想为自己构建一个在线应用程序,用于管理自己的库存并将商品提交到本地分类网站。这个本地分类网站没有 API,只有一些看起来很旧的 HTML 表单,其中有多个步骤。
不使用selenium/webdriver,或通过firefox/chrome启动虚拟客户端,有什么方法可以在网页上远程提交表单?由于提交过程是多个步骤,因此它必须支持某种 session 。
我已经使用 webdriver 和 python 完成了它,这似乎是网上类似问题最流行的答案。
最佳答案
一般来说,您应该能够使用任何 HTTP 客户端/库来完成此任务(因为,在幕后,一切都归结为对某些服务器进行正确的 HTTP 调用)。
它的难度在很大程度上取决于您所交互的应用程序的设计方式(糟糕程度)。
在简单的场景中,您需要:
- 登录并跟踪 session cookie
- 通过 POST 将数据发送到服务器
这里的示例使用 Python requests
,这几乎是当今最好的选择。
让我们开始吧。
首先,您需要检查您的登录页面表单。通常,查看页面 HTML 将为您提供有关如何构建请求的足够信息。
一个例子可以是:
<form action="/login" method="POST">
<input type="text" name="username">
<input type="password" name="password">
...
</form>
为了跟踪 cookie,我们将使用 Session
对象:
import requests
session = requests.Session()
接下来,我们将通过 POST 提交凭据(假设您的应用位于 http://example.com
):
response = session.post(
'http://example.com/login',
data={'username': 'your_user', 'password': 'your_password'})
此时,您可以检查 response.ok
以确保一切顺利。如果您检查 session.cookies
,您应该会看到您的 session cookie 已被设置。
从现在开始,使用该 session 向您的应用发出的所有请求都将经过身份验证,因此与您从浏览器运行的请求相同。
要提交表单数据,只需开始检查应用程序的工作方式(通过检查表单获取提交 URI 和表单字段名称,就像我们对登录页面所做的那样,然后使用同一 session 通过 POST 提交数据)。
如果页面 HTML 很复杂,使用浏览器开发人员工具观察 HTTP 请求并通过代码复制它们也可能会有所帮助。
关于javascript - 有没有一种方法可以在不使用 selenium 或浏览器客户端的情况下从在线应用程序提交表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38965268/