首页 > 其他分享 >利用selenium自动提交表单

利用selenium自动提交表单

时间:2024-04-23 18:56:43浏览次数:20  
标签:xpath webdriver 元素 selenium id 提交 表单 find

  • 安装selenium

pip --trusted-host pypi.tuna.tsinghua.edu.cn install selenium

pip --trusted-host mirrors.aliyun.com install cookielib

pip --trusted-host pypi.douban.com install cookielib

  • 安装chromedriver

chromedriver下载地址

http://npm.taobao.org/mirrors/chromedriver/(可用)

注意 :chromedriver的版本要与你使用的chrome版本对应,note中有

解压的chromedriver.exe放进文件夹,再配置进path环境变量

  • 如果环境变量未生效,可写入代码中
  • ChromeDriverServer = '''C:\Users\pengzuo\AppData\Local\Google\Chrome\chromedriver.exe'''os.environ["webdriver.chrome.driver"] = ChromeDriverServer brguge = webdriver.Chrome(executable_path=ChromeDriverServer) brguge.get('https://www.baidu.com')#发送get请求input=brguge.find_element_by_id('kw')#找到目标

  • 查找

Selenium-Webdriver

Intro:

  Selenium是元素se(硒)。这个Selenium(以下简称Se)最开始只是一个自动化测试的项目,然后逐渐独立出来,并演化出了很多部分:Selenium IDE、Selenium Client API、Selenium Webdriver、Selenium Remote Control、Selenium Grid. Se对firefox支持较为友好!webdriver对firefox做了原生支持。并且Selenium IDE是firefox上的一个插件。可惜,Firefox更新了Quantum(57),大改了内核。目前Selenium IDE还是处在不适合当前版本的状态。

具体详见:https://www.cnblogs.com/yogayan/p/6710119.html

  

一、安装

  这里安装的就是selenium Client API

  python: pip install selenium

  配合浏览器驱动:

  chromedriver  欢迎大家FQ下载:https://sites.google.com/a/chromium.org/chromedriver/downloads。然后找个环境路径存一下就可以调用了。

  IEdriver      github下载:https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver 。 同样环境路径保存。

          注意:IE玩家把internet选项-安全- 四个选项的启动保护模式都关掉!

PhantomJS     直接解压,把bin目录放在环境路径中

  Opera以及geckodriver试了一下,对最新的opera和firefox都不怎么好使。当然可以下载较低的版本使用。(所以以下所有测试都选择了IE9)

二、基本使用

2.1 启动浏览器

from selenium import webdriver
driver=webdriver.Ie()   #或者webdriver.Chrome()
driver.get('https://www.baidu.com') 
driver.page_source    #拿到所有html内容,注意这里可能显示不全,因为网速跟不上程序嘛
driver.close()    #关闭浏览器

** 2.2 常用接口**

from selenium import webdriver
from selenium.webdriver import ActionChains  #这个是模仿鼠标动作的
from selenium.webdriver.common.by import By #这个是设置查找方式的By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #这个是模拟键盘按键操作的
from selenium.webdriver.support import expected_conditions  #这个是标注状态的
from selenium.webdriver.support.wait import WebDriverWait #这个是等待页面加载某些元素

2.3 选择器

1、find_element_by_id        按照id 查找
     2、find_element_by_link_text  按照里面的文本查找,比如查找

好呀

find_element_by_link_text("好呀")
     3、find_element_by_partial_link_text   按照文本的部分模糊查找,比如查找

好呀

find_element_by_link_text("好")
     4、find_element_by_tag_name    按照标签名
     5、find_element_by_class_name    按照类名
     6、find_element_by_name        按照name属性查找
     7、find_element_by_css_selector    css选择器的方式查找
     8、find_element_by_xpath/find_elements_by_xpath       比较神奇的查找方式

   9、所有方式均可以用find_element(By.ID,"lala")这种形式替代

   p.s. 一些方法取到的是元素集合,用索引或者for循环取单独的值。
 
下面是查找多个元素(这些方法将返回一个列表):
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

a. 用contains关键字,定位代码如下:
1 driver.findElement(By.xpath(“//a[contains(@href, ‘logout’)]”));

这句话的意思是寻找页面中href属性值包含有logout这个单词的所有a元素,由于这个退出按钮的href属性里肯定会包含logout,所以这种方式是可行的,也会经常用到。其中@后面可以跟该元素任意的属性名。

b. 用start-with,定位代码如下:
1 driver.findElement(By.xpath(“//a[starts-with(@rel, ‘nofo’)]));

这句的意思是寻找rel属性以nofo开头的a元素。其中@后面的rel可以替换成元素的任意其他属性。

c. 用Text关键字,定位代码如下:
1 driver.findElement(By.xpath(“//*[text()=’退出’]));

这个方法可谓相当霸气啊。直接查找页面当中所有的退出二字,根本就不用知道它是个a元素了。这种方法也经常用于纯文字的查找。

另外,如果知道超链接元素的文本内容,也可以用
1 driver.findElement(By.xpath(“//a[contains(text(), ’退出’)]));

这种方式一般用于知道超链接上显示的部分或全部文本信息时,可以使用。

最后,关于xpath这种定位方式,webdriver会将整个页面的所有元素进行扫描以定位我们所需要的元素,所以这是一个非常费时的操作,如果你的脚本中大量使用xpath做元素定位的话,将导致你的脚本执行速度大大降低,所以请慎用。

8. By.cssSelector()

cssSelector这种元素定位方式跟xpath比较类似,但执行速度较快,而且各种浏览器对它的支持都相当到位,所以功能也是蛮强大的。

下面是一些常见的cssSelector的定位方式:

定位id为flrs的div元素,可以写成:#flrs     注:相当于xpath语法的//div[@id=’flrs’]

定位id为flrs下的a元素,可以写成 #flrs > a  注:相当于xpath语法的//div[@id=’flrs’]/a

定位id为flrs下的href属性值为/forexample/about.html的元素,可以写成: #flrs > a[href=”/forexample/about.html”]

如果需要指定多个属性值时,可以逐一加在后面,如#flrs > input[name=”username”][type=”text”]。

明白基本语法后,我们来尝试用cssSelector方式来引用图(3)中选中的那个input对象,代码如下:
WebElement password = driver.findElement(By.cssSelector("#J_login_form>dl>dt>input[id=’ J_password’]"));

同样必须注意层级关系,这个不能省略。

cssSelector还有一个用处是定位使用了复合样式表的元素,之前在第4种方式className里面提到过。现在我们就来看看如何通过cssSelector来引用到第4种方式中提到的那个button。button代码如下:

cssSelector引用元素代码如下:
driver.findElement(By.cssSelector("button.btn.btn_big.btn_submit"))

。这样就可以顺利引用到使用了复合样式的元素了。

此外,cssSelector还有一些高级用法,如果熟练后可以更加方便地帮助我们定位元素,如我们可以利用^用于匹配一个前缀,$用于匹配一个后缀,*用于匹配任意字符。例如:

匹配一个有id属性,并且id属性是以”id_prefix_”开头的超链接元素:a[id^='id_prefix_']

匹配一个有id属性,并且id属性是以”_id_sufix”结尾的超链接元素:a[id$='_id_sufix']

匹配一个有id属性,并且id属性中包含”id_pattern”字符的超链接元素:a[id*='id_pattern']

最后再总结一下,各种方式在选择的时候应该怎么选择:

  1. 当页面元素有id属性时,最好尽量用id来定位。但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法。

  2. xpath很强悍,但定位性能不是很好,所以还是尽量少用。如果确实少数元素不好定位,可以选择xpath或cssSelector。

  3. 当要定位一组元素相同元素时,可以考虑用tagName或name。

  4. 当有链接需要定位时,可以考虑linkText或partialLinkText方式。

标签:xpath,webdriver,元素,selenium,id,提交,表单,find
From: https://www.cnblogs.com/bigleft/p/18153562

相关文章

  • 试说明表单和超链接的相同点和不同点,及各自的使用场合
    表单和超链接都是Web页面中的交互元素,它们允许用户与网站进行交互,但它们在功能和使用场合上有一些明显的相同点和不同点。相同点:交互性:表单和超链接都提供了用户与网页进行交互的方式。用户可以通过点击超链接跳转到另一个页面,或者通过填写表单提交信息给服务器。导航:在一定程......
  • 自定义表单系统开源是否好用?
    在竞争激烈的社会中,拥有够灵活、易维护、可视化界面等优势特点的低代码技术平台获得了很多中小型企业的认可与信赖。在提升企业竞争力、办公效率和规避信息孤岛等方面具有重要的应用价值和作用。流程信息为客户提供低代码技术平台、自定义表单系统开源,助力企业降本增效,创造新前程......
  • 使用C# 创建、填写、删除PDF表单域
    通常情况下,PDF文件是不可编辑的,但PDF表单提供了一些可编辑区域,允许用户填写和提交信息。PDF表单通常用于收集信息、反馈或进行在线申请,是许多行业中数据收集和交换的重要工具。PDF表单可以包含各种类型的输入控件,如文本框、复选框、下拉菜单、单选按钮等。本文将介绍如何使用C#......
  • 使用C# 创建、填写、删除PDF表单域
    通常情况下,PDF文件是不可编辑的,但PDF表单提供了一些可编辑区域,允许用户填写和提交信息。PDF表单通常用于收集信息、反馈或进行在线申请,是许多行业中数据收集和交换的重要工具。PDF表单可以包含各种类型的输入控件,如文本框、复选框、下拉菜单、单选按钮等。本文将介绍如何使用C#......
  • Java+Selenium+edge自动化测试环境搭建
    查看edge版本:​​下载edge驱动:MicrosoftEdgeWebDriver|MicrosoftEdge开发人员​​在官网下载依赖包:Downloads|Selenium​​​​安装edge扩展:​​​​解压下载到的jar到一个文件夹,添加jar包:​​写一个自动化测试类:importorg.openqa.selenium.edge.EdgeDriv......
  • 前端如何防止接口重复提交
    什么是接口重复提交?接口重复提交指的是在网络通信中,同一个请求被客户端多次发送到服务器端的情况。这种情况可能由于多种原因导致,例如用户在等待期间多次点击提交按钮、网络超时后客户端重新发送请求、客户端发送的请求在网络传输过程中出现重复等。接口重复提交可能会导致多种......
  • 微信小程序的表单验证
    在项目中用到过的稍有改动的WxValidate.js文件/***表单验证**@param{Object}rules验证字段的规则*@param{Object}messages验证字段的提示信息**/classWxValidate{constructor(rules={},messages={}){Object.assign(this,{data:{......
  • Jenkins集成GitLab的正确姿势,实现Git代码提交触发CI/CD
    ❝jenkins和gitlab是目前DevOps工具链中最常见的,抛开gitlab-ci不谈,gitlab代码提交触发jenkins流水线是最经典的搭配。这里就介绍下如何配置实现jenkins和gitlab之间的集成。安装GitLabPlguinGitlabPlugin-这个插件允许GitLab在提交代码或打开/更新合并请求时触发Jenkins......
  • 使用float,flex和tailwind实现同一个表单注册效果
    float方式html结构<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</titl......
  • 记一次hadoop yarn环境无法提交任务的问题排查
    1.集群环境ambari-version:2.7.5HDP-version:3.02.问题描述hadoop-yarn的启动之后,运行一段时间,莫名其妙的出现新的任务无法提交上去,查看yarn的状态之后,发现yarn的状态都是正常的,并且所有的资源都是充足的,但是提交任务之后就会一直处于accept状态3.问题表现4.问题排查4.......