检测并填写任何网页表单与Selenium-Python



我对硒测试有点陌生。我想使用Selenium来检测任何网页中的表单并填写它们。我不想局限于单个网页,例如必须检查页面或查看页面源代码以获取 ID 或名称或 Xpath。

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

注意:请问我正在使用python。

据我所知,对于您所说的问题,没有开箱即用的解决方案。主要是因为你的问题太宽泛了。

硒不能检测"形式",除非你告诉它形式是什么。为此,您需要为任何网页上可能有资格作为表单输入字段的所有元素找到可识别的 CSS 或 XPATH 选择器。

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

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

我建议多读一点关于硒是什么以及它可以做什么。有多个python/selenium教程可用。我会首先开始阅读有关Selenium的python实现中可用的绑定,如果你选择python作为你工作选择的脚本语言。http://selenium-python.readthedocs.io/index.html

查看此处的文档

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

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

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

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

网址 : https://kenoshasmiles.com/contact

  1. 转到网站并在控制台上执行此代码: 检查模式以获得在任何网页上填写任何表单的所有可能方法,这是我对此解决方案的方法: 父亲>子项>子项>子项>子项>值 =>与标签"名称"匹配

let element = document.getElementsByTagName('form')                     
for(item in element){ 
for(child in element[item].children){ 
for(subchild in element[item].children[child].children){ 
for( kid in element[item].children[child].children[subchild].children){ 
//structure: form > div > div > div > div > value
for( subkid in element[item].children[child].children[subchild].children[kid].children){ 
// iterate over subkids childrens
for( last in element[item].children[child].children[subchild].children[kid].children[subkid].children){               
//element[item].children[child].children[subchild].children[kid].children[subkid].children[last].value = "James"
//console.log(element[item].children[child].children[subchild].children[kid].children[subkid].children[last])
//pattern name

if(element[item].children[child].children[subchild].children[kid].children[subkid].innerText.includes('Name') || element[item].children[child].children[subchild].children[kid].innerText.includes('Name')){
element[item].children[child].children[subchild].children[kid].children[subkid].children[last].value = "Jose Jose"
console.log('Name > ', element[item].children[child].children[subchild].children[kid].children[subkid].children[last])
}

//pattern email
if(element[item].children[child].children[subchild].children[kid].children[subkid].innerText.includes('email') || element[item].children[child].children[subchild].children[kid].innerText.includes('Email')){
element[item].children[child].children[subchild].children[kid].children[subkid].children[last].value = "jose@gmail.com"
console.log('Email > ',element[item].children[child].children[subchild].children[kid].children[subkid].children[last])
}
//pattern Phone
if(element[item].children[child].children[subchild].children[kid].children[subkid].innerText.includes('Phone') || element[item].children[child].children[subchild].children[kid].innerText.includes('Phone')){
element[item].children[child].children[subchild].children[kid].children[subkid].children[last].value = "887446714"
console.log('Email > ',element[item].children[child].children[subchild].children[kid].children[subkid].children[last])
}
//pattern Phone
if(element[item].children[child].children[subchild].children[kid].children[subkid].innerText.includes('Contact Reason') || element[item].children[child].children[subchild].children[kid].innerText.includes('Contact Reason')){
element[item].children[child].children[subchild].children[kid].children[subkid].children[last].value = "Appoinment"
console.log('Contact Reason > ',element[item].children[child].children[subchild].children[kid].children[subkid].children[last])
}
//pattern Comments
if(element[item].children[child].children[subchild].children[kid].children[subkid].innerText.includes('Comments') || element[item].children[child].children[subchild].children[kid].innerText.includes('Comments')){
element[item].children[child].children[subchild].children[kid].children[subkid].children[last].value = "Hi, My name is Jose."
console.log('Comments > ',element[item].children[child].children[subchild].children[kid].children[subkid].children[last])
}
}
}
} 
} 
}  
}

最新更新