【问题标题】:Write a auto-fill and submit web form program编写一个自动填写和提交网络表单程序
【发布时间】:2018-11-02 09:11:07
【问题描述】:

我正在尝试编写一个程序,该程序可以在特定时间段内自动填写并提交 Web 中的表单。

但我不知道如何以及从哪里开始。我在谷歌中搜索了这个,但只得到了非常一般的答案,比如使用 JavaScript、python。谁能告诉我应该先学习哪些语言?

【问题讨论】:

标签: javascript php python forms autofill


【解决方案1】:

尽管这个线程上的通用建议非常好,但它非常广泛。我自己解决了这个问题,尽管我发布了一个功能齐全的示例,但它被版主删除了,尽管“理论上回答了问题”。

因此,对于希望解决此问题的其他人,您需要执行以下操作: 使用 Selenium 和 openpyxl,这是两个相对简单的模块,可以完美地完成这项任务。

您将使用 selenium 打开您的网页,并检索您希望填充的相关 html 元素。如果您不精通 HTML,我建议您通过 xPath 查找元素。 Xpath finder google chrome 插件将使这变得非常容易。

driver.get() 和 driver.find_element_by_xpath() 将是您需要的函数。

我们将使用 openpyxl 来处理我们的 excel 表格。 'load_workbook()' 将加载工作簿。然后,我们将使用“sheet = workbook.active”函数从工作簿中访问工作表。

我们现在可以打开我们的网站并选择一个 Excel 表格。

现在我们需要将单元格值分配给变量,以便我们可以填充 HTML 表单。我们为工作簿中的每个 COLUMN 分配一个变量。因此,如果 A 列包含 first_names,我们可以通过编写 'FNAME = sheet['A'] 将其分配给一个变量。现在我们有了一种在列中引用单元格的方法,我们可以开始将数据输入到我们的 HTML 表单中。

我们使用 Selenium 中的 .send_keys() 函数填充表单。

first_name.send_keys(FNAME.value)

.value 确保显示正确的值,因为有时 selenium 会打印单元格函数而不是值,我们不希望这种情况发生。

现在我们可以从我们的 excel 表格中将值打印到我们的 HTML 表单中,我们需要遍历每一行。我们通过一个简单的 while 循环来做到这一点:

i = 1
x = 1
while x <= 50:
  first_name.send_keys(FNAME[i].value)
  i+=1
  x+=1
driver.quit

一旦循环发生 50 次,驱动程序将退出,关闭浏览器并停止脚本。

在尝试自动执行此操作时,您可能会发现其他一些有用的东西:

driver.back()

time.sleep()

如果您想看一个实际的工作示例,请随时 PM 我,因为显然在这里发布它并没有帮助讨论。

【讨论】:

  • 我认为一切都会完美,但在我的情况下,当在 Intranet 中加载网页时,浏览器会通过活动目录进行身份验证并在右上角显示我的名字。通过脚本执行此操作时,我得到了清晰显示的 HTML:“

    401 - 未经授权:由于凭据无效,访问被拒绝。

【解决方案2】:

您找到的答案虽然一般,但都是正确的。我会尽力向你解释。

当你试图自动化一些活动时,你必须使用script language 来基本上

  1. 获取东西引用(例如获取索引、表单/字段 ID 等)
  2. 插入/更改内容(如填充字段,遵循字段引用)
  3. 保存内容(准备一个文件,包含字段引用及其内容,可以注入特定系统或网站)

脚本语言的一个例子是Python

所以你已经有了你的脚本。现在你需要在页面上注入它。可以为你做这件事的编程语言是Javascript, or JS。它允许您与网页对话,获取数据/引用或发布数据。

【讨论】:

    【解决方案3】:

    我建议您使用名为 Selenium Webdriver 的库编写 Python 脚本。

    你的想法很容易实现。

    【讨论】:

    • 有没有办法从现有的 Web 应用程序中驱动此操作?我有一个客户要求拖放一个包含 100 行的文件,所有这些都需要输入到这个第 3 方表单中。所以他们想去一个站点,删除文件,解析行,去第 3 方站点,然后执行表单,但需要多次
    • 当然,您可以在无头模式下从后端执行 Selenium。如果您遇到问题,请创建一个新问题,您将很容易找到帮助。
    • tried and got bombed。我实际上不确定在哪里发布这样的问题。有什么建议吗?
    • 那里的答案中已经提供了建议。我建议您实施您的解决方案,看看它是否有效。如果没有,那么你有一个实际的技术问题,你可以在 Stackoverflow 上提出一个有效的问题,例如。类似于“我尝试了这段代码,但它不起作用,因为我收到错误 XXX”。
    • 您要求的是为您构建解决方案,而这在 StackExchange 上不会发生。但是您可以在提供此类服务的不同网站上获得类似的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多