javascript - 有没有一种方法可以在不使用 selenium 或浏览器客户端的情况下从在线应用程序提交表单?

标签 javascript python forms selenium web-scraping

我想为自己构建一个在线应用程序,用于管理自己的库存并将商品提交到本地分类网站。这个本地分类网站没有 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/

相关文章:

javascript - 在新闻通讯中使用 google plusone 按钮(不是共享按钮)

javascript - 自动修改 JSON 数据并在构建时保存

css - 如何删除 IE 6 中单选按钮周围的空格?

javascript - 如何将 onfocus 事件监听器添加到输入字段以更改标签的样式

javascript等待多个异步ajax响应不起作用

javascript - 流程不检测 if block 处理潜在的未定义(可能)值。为什么?

python - PyQt5 pyuic模块错误

python - python中字符串的打印长度

python - Tabula-py - 导入错误 : No module named tabula

html - 单选按钮 css 和 IE9