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

时间:2017-07-04 13:28:11

标签: python forms selenium

我对Selenium测试有点新意。我想使用Selenium来检测任何网页中的表单并填充它们。我不希望被限制在单个网页上,例如必须检查页面或查看页面源以获取id或名称或Xpath。

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

注意:我正在使用python。

3 个答案:

答案 0 :(得分:2)

据我所知,目前没有开箱即用的解决方案。主要是因为你的问题太广泛了。

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

此外,只有当您知道网页如何分类并且“好”时,您才可以在具有可接受输入的表单中填写每个可能的输入字段。并且"坏"输入。 Selenium无法为您做出选择。

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

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

答案 1 :(得分:1)

Have a look at the documentation here

你可能想做类似的事情:

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

答案 2 :(得分:-1)

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

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

url: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])
              }

              
          }
        }
      } 
    } 
  }  
}