0

我在一家小型软件公司担任 UI 测试员。为了让我的生活更轻松,我正在尝试用 Python 编写一个爬虫,它会自动生成一些在每个页面上运行的标准测试。测试使用 Quicktest Pro 完成,需要用 VBScript 编写。创建数据的每个页面都需要有一个完整的案例,其中页面上的每个字段都被填写,以及数量减少的案例,其中只填写必填字段。

完整的案例应该很简单——我计划使用已经过身份验证的 cookie 设置 requests.Session 对象,向适当的页面发送 GET 请求,并使用 BeautifulSoup 解析响应。

减少的案例我不太确定如何处理。我可以想到三种方法来解决它,但没有一个听起来很棒:

A) 尝试提交一个空白页。<field>检查“*是必填字段”形式的错误消息的响应。查找名称与指定字段最接近的字段。填写它们。尝试再次提交,并重复,添加字段,直到成功通过,并返回字段列表。

这不是很好,因为很难确定错误消息对应的字段。一条声明“* Birth date is required”的消息实际上可能是指 HTML ID 为“dob_entry1”的表单元素。我还在源代码的开发副本上进行测试,因此部分填写的表单导致服务器错误并不罕见,我可能需要手动清理这种方法创建的任何数据。

B) 发送完整填写的表格。查找刚刚创建的数据库记录,并找出哪些列不是 NULL。将列名与字段名匹配,并返回结果列表。

这似乎更有希望,但我不确定如何查找已创建的记录。MySQL 服务器的日志(错误除外)没有打开,服务器上有大约 15 个数据库,所有这些都由开发人员处理,所以我不能乱用服务器的全局变量来打开它. 我可以在数据库中查询我刚刚传入的所有值,但是数据库上已经有大量数据,所以我不太可能例如找出哪个出生日期是我刚刚提交的一个。

谷歌搜索,像http://hackmysql.com/mysqlsniffer这样的工具可能是一种选择,但我对对整个服务器做任何事情持谨慎态度,因为开发人员将同时在服务器上使用其他数据库。我对 SQL 没有太多经验,所以我不太确定如何去做。

C) 以某种方式解析 C# 源代码以找到对应于给定页面的查询。找出它影响哪些列,查询数据库以找出哪些不是 NULL,将列名与字段名匹配并返回一个列表。

我没有使用 C# 的经验,所以我不知道这有多可行,但如果是 PHP,我认为它会非常简单。如果我四处寻找,我可以找到该网站的来源,但我还没有看过任何一个。该网站已有约 10 年历史,规模庞大,因此将页面名称与源文件匹配可能并非易事。

我想找出提交页面需要表单的哪些字段对于爬虫来说是一项非常常见的任务,但谷歌并没有出现太多。这些方法是否合理?有没有我错过的简单解决方案?

4

1 回答 1

1

我认为您的第一选择 - 从 HTML 响应中找出需要哪些字段 - 是您最安全的选择。尝试将字段名称与数据库列名称匹配可能是一个真正的问题 - 在保存到数据库之前,您不知道数据经过了多少层 - 字段名称看起来与列名称完全不同。

查看是否需要一个字段应该不会太难 - 从完整的表格开始并提交它以查看它是否合法。然后再次发送表单,没有第一个字段。如果您遇到错误 - 该字段是必需的。再次填写第一个字段,清除第二个字段并重试。对表单中的每个字段执行此操作。

Web 应用程序需要足够稳定才能正常工作。您应该能够区分缺失字段错误和服务器错误。

哦,请检查@Ming Slogar 的评论 - 如果 HTML 人员在 HTML 中将字段标记为必填项,那么您将有很多空闲时间。

于 2013-08-11T22:16:03.200 回答