使用Selenium Python检测并填写任何网页表单

使用Selenium Python检测并填写任何网页表单,python,forms,selenium,Python,Forms,Selenium,我对硒测试有点陌生。我想使用Selenium来检测任何网页中的表单并填充它们。我不想被限制在一个网页上,比如必须检查页面或查看页面源代码才能获得id、名称或Xpath 我只想能够输入任何网页URL,selenium应该检测表单,填写表单并提交。例如,任何网页中的注册或登录表单。谢谢 注意:我正在使用python。据我所知,对于您所说的问题,没有现成的解决方案。主要是因为你的问题太广泛了 Selenium无法检测表单,除非您告诉它表单是什么。要做到这一点,您需要为任何网页上可以作为表单输入字段的所

我对硒测试有点陌生。我想使用Selenium来检测任何网页中的表单并填充它们。我不想被限制在一个网页上,比如必须检查页面或查看页面源代码才能获得id、名称或Xpath

我只想能够输入任何网页URL,selenium应该检测表单,填写表单并提交。例如,任何网页中的注册或登录表单。谢谢


注意:我正在使用python。据我所知,对于您所说的问题,没有现成的解决方案。主要是因为你的问题太广泛了

Selenium无法检测表单,除非您告诉它表单是什么。要做到这一点,您需要为任何网页上可以作为表单输入字段的所有元素找到一个可识别的CSS或XPATH选择器

此外,只有知道网页如何区分好输入和坏输入,才能在表单中用可接受的输入填充每个可能的输入字段。Selenium不能为你做出这样的选择

提交表单有多种方式,大多数网页使用提交或类似按钮。Selenium无法自动检测该按钮并为您按下,您需要通过选择器告诉它该按钮在页面上的位置

我建议多读一点关于硒是什么以及它能做什么的内容。有多个python/selenium教程可用。如果您选择python作为您工作中的脚本语言,我将首先开始阅读有关Selenium的python实现中可用的绑定

您可能希望执行以下操作:

all_inputs = driver.find_elements_by_tag_name("input")
for input in all_inputs:
   input.sendKeys("my password")

尝试验证结构并按层次生成模式:

您还知道,有一个表单元素包含表单中的所有元素,例如:

网址:

转到网站并在控制台上执行此代码: 检查模式以获得所有可能的方法来填写任何网页上的任何表单,这是我的解决方案: 父项>子项>子项>子项>值=>与标签名称匹配 let element=document.getElementsByTagName'form' 元素{ 元素[item]中的forchild。子项{ forsubchild在元素[item]中。子元素[child]。子元素{ 用于元素[item]中的子元素。子元素[child]。子元素[subchild]。子元素{ //结构:form>div>div>div>div>value 用于元素[item]中的子项。子项[child]。子项[subchild]。子项[child]。子项{ //迭代子儿童 对于元素[item]中的最后一个。子元素[child]。子元素[subchild]。子元素[kid]。子元素[subkid]。子元素{ //元素[item]。子元素[child]。子元素[subchild]。子元素[kid]。子元素[subkid]。子元素[last]。值=James //console.logelement[item]。children[child]。children[subchild]。children[kid]。children[subkid]。children[last] //图案名称 ifelement[item]。children[child]。children[subchild]。children[kid]。children[subchild]。innerText。包括'Name'| |元素[item]。children[child]。children[kid]。innerText。包括'Name'{ 元素[item]。子元素[child]。子元素[subchild]。子元素[kid]。子元素[subkid]。子元素[last]。值=Jose Jose console.log'Name>,元素[item]。children[child]。children[subchild]。children[kid]。children[subkid]。children[last] } //模式电子邮件 ifelement[item]。children[child]。children[subchild]。children[kid]。children[subchild]。innerText。包括“电子邮件”| |;元素[item]。children[child]。children[kid]。innerText。包括“电子邮件”{ 元素[item]。子元素[child]。子元素[subchild]。子元素[kid]。子元素[subkid]。子元素[last]。值=jose@gmail.com console.log'Email>,元素[item]。children[child]。children[subchild]。children[kid]。children[subkid]。children[last] } //模式电话 ifelement[item]。children[child]。children[subchild]。children[kid]。children[subchild]。innerText。包括'Phone'| |元素[item]。children[child]。children[kid]。innerText。包括'Phone'{ 元素[item]。子元素[child]。子元素[subchild]。子元素[kid]。子元素[subkid]。子元素[last]。值=887446714 console.log'Email>,元素[item]。children[child]。children[subchild]。children[kid]。children[subkid]。children[last] } //模式电话 ifelement[item]。children[child]。children[child]。children[kid]。children[subchild]。innerText。包括“联系原因”| |元素[item]。children[child]。children[kid]。innerText。包括“联系原因”{ 元素[item]。子元素[child]。子元素[subchild]。子元素[kid]。子元素[subkid]。子元素[last]。值=appoiment 控制台,日志控制 行为原因>',元素[item]。子元素[child]。子元素[subchild]。子元素[kid]。子元素[subchild]。子元素[last] } //模式注释 ifelement[item]。children[child]。children[subchild]。children[kid]。children[subchild]。innerText。包括'Comments'| |元素[item]。children[child]。children[kid]。innerText。包括'Comments'{ 元素[item].children[child].children[subchild].children[subchild].children[last].value=Hi,我的名字是Jose。 console.log'Comments>,元素[item]。children[child]。children[subchild]。children[kid]。children[subkid]。children[last] } } } } } }
}我实际上想建立一个完整的测试软件,可以测试多个站点。首先,没有多少代码可以测试一个站点,但这是一个更广泛的讨论。有关参考,请参阅。其次,假设你的意思是我想写一些代码,对我任意定义的一些网站列表运行一组自动检查,那么没有免费的插件解决方案可以做到这一点。您需要定义检查,为检查定义通过/失败标准,并汇总测试结果。感谢您的回复。我其实想建立一个完整的测试软件,可以测试多个网站。我希望能够编写测试,可以为任何网站工作,而不仅仅是一个特定的网站,因为我受到元素ID,名称等的限制。这就是为什么我想从非常基本的东西,如表单注册和登录开始。事实上,我从这个链接中获得了我以前关于硒的知识。我仍然会尽你所能感谢你的帮助。限制你得出结论的是你对问题范围的理解。此外,你用准时的解决方案来解决问题的方法可能会或可能不会帮助你得出结论,这很可能会导致你得出错误的结论。我的回答试图帮助你把这个问题重新定义为一个更简单的问题。在我看来,这是一个可以解决问题的方法。我试图帮助你理解你努力的复杂性。只要有足够的工作和时间,一个人就能移山。编写选择器和启发式算法来检测、填充任何和所有可能的组合和输入字段,或按人脑设计的按钮并非不可能。这是一个非常非常非常大量的工作。测试中最棘手的部分不是点击按钮或查找字段tho。谢谢。这可以一次选择所有输入,并用我的密码填充它们。但这并不是我想要的…如何填写名字,姓氏,电子邮件…如果它是一个复选框呢?