当前位置: 首页 > news >正文

Selenium在Pyhton应用

目录

1. selenium的基本原理

2. selenium环境的搭建步骤

3. 元素的定位和操作

4.元素的基本属性方法

5.浏览器的操作方法

6.三种等待

强制等待

显示等待

隐式等待

7. 键盘与鼠标的操作

 鼠标悬停用

拖拽操作

8. 下拉框元素定位

9.页面滚动操作

10. 页面截图操作


Selenium是一个用于Web应用程序测试的工具,它提供了一套完整的工具来编写自动化Web应用程序的测试。Selenium测试脚本,并且可以模拟用户与浏览器的交互

1. selenium的基本原理

  1. WebDriver

    • WebDriver是Selenium的核心组件,它是一个接口,用于编写客户端程序来控制浏览器。

    • WebDriver可以启动浏览器实例,发送命令给浏览器,接收浏览器的响应。

    • WebDriver支持多种浏览器,包括Chrome、Firefox、Internet Explorer、Safari等。

  2. 定位元素

    • 通过各种策略(如id、name、class name、css selector、xpath等)定位页面上的元素。

    • 可以对定位单个元素或元素集合进行操作。

  3. 操作

    • 可以模拟用户操作,如点击、输入文本、拖拽等。

    • 可以获取和设置元素的属性和值。

  4. 等待

    • 隐式等待(Implicit Wait):WebDriver会在执行命令时自动等待元素可操作。

    • 显式等待(Explicit Wait):通过编写代码显式等待特定条件成立。

  5. 测试脚本

    • 用支持数据驱动测试,从外部文件或数据库读取测试数据。

    • 支持并发执行测试,可以同时运行多个测试脚本。

  6. 结果验证

    • 可以验证页面元素的状态,检查是否符合预期。

    • 支持断言(Assertions),验证测试结果是否符合预期。

2. selenium环境的搭建步骤

环境安装  pip install selenium

浏览器选择:支持多种浏览器

匹配规则:驱动版本与浏览器版本前三位必须一致,版本不匹配将导致代码无法运行

各版本驱动下载: chromedriver浏览器驱动各版本下载(...113、114、115、116、117、118、119、120、121、122、123、124、125、126、127、128、129、130、131、132、133、134、135、136、137、138、139、140)(原创) - Z哎呀 - 博客园

将下载驱动导入代码包中

import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get("https://www.baidu.com/")#页面最大化
driver.maximize_window()time.sleep(3)
#关闭驱动对象
driver.quit()

3. 元素的定位和操作

  • ID定位:通过元素的id属性(最常用)
  • name定位:通过元素的name属性
  • class定位:通过元素的class属性(注意class可能有多个值)
  • 标签定位:通过标签名(不推荐,难以保证唯一性)
  • link_text:精准匹配超链接文本
  • partial_link_text:模糊匹配超链接文本
  • CSS选择器:通过CSS表达式定位
  • XPath:通过XML路径表达式定位
import timefrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get("https://www.baidu.com/")#页面最大化
driver.maximize_window()#driver.find_element(By.ID,"kw").send_keys("李")#定位标签超链接的方式
#driver.find_element(By.LINK_TEXT,"新闻").click()
#模糊定位
#driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()#Xpath定位
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys("cxk")time.sleep(3)
#关闭驱动对象
driver.quit()

4.元素的基本属性方法

5.浏览器的操作方法

#设置浏览器的分辨率(宽高)
driver.set_window_size(600,600)
#设置浏览器的相对位置
driver.set_window_position(100,600)
#浏览器的刷新
driver.refresh()
#浏览器的前进
driver.forward()
#浏览器的回退
driver.back()
#关闭浏览器的整个页面
driver.quit()
#关闭浏览器的当前页面
driver.close()
#页面标题
print(driver.title)
#页面当前网址
print(driver.current_url)

6.三种等待

强制等待

显示等待

导入模块

  1. 导入 WebDriverWait 类

    • WebDriverWait 类用于显式等待(Explicit Wait),它允许你指定一个条件,当该条件满足时继续执行脚本。这有助于处理页面加载或元素出现时的延迟问题。

  2. 导入 expected_conditions 模块

    • expected_conditions 模块包含一组预定义的条件,这些条件用于与 WebDriverWait 一起使用。这些条件定义了各种等待条件,如元素是否可见、是否可点击等。

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

在设定时间内,不间断的时间点去定位元素

一旦元素被加载出来,就会被定位到元素,然后执行操作

如果在有效时间内没有定位到元素,那么程序会报错: 超时错误TimeoutException

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()driver.get("https://www.baidu.com/")#页面最大化
driver.maximize_window()#Xpath定位
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys("cxk")
driver.find_element(By.XPATH,'//*[@id="su"]').click()el1 = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="s_tab_inner"]/a[2]/span')))
el1.click()time.sleep(3)
#关闭驱动对象
driver.quit()

隐式等待

driver.implicitly_wait(3)
driver.find_element(By.XPATH,'//*[@id="s_tab_inner"]/a[2]/span')

元素第一次被定位的时候如果能够定位到,那么不会触发隐式等待,如果定位不到才会触发隐式等待的有效时间

可是设置隐式等待的有效时长,如果在有效时长里定位元素,那么不会报错,反之会报错提示,没有找到钙元素的异常: NoSuchElementException

7. 键盘与鼠标的操作

需要从webdriver包中导入Keys类

from selenium.webdriver.common.keys import Keys

输入"美女"文本:element1.send_keys("美女")
全选内容:element1.send_keys(Keys.CONTROL + 'a')
复制内容:element1.send_keys(Keys.CONTROL + 'c')
删除内容:element1.send_keys(Keys.BACKSPACE)
输入"帅哥"文本:element1.send_keys("帅哥")
再次全选:element1.send_keys(Keys.CONTROL + 'a')
粘贴内容:element1.send_keys(Keys.CONTROL + 'v')
清空内容:element1.clear()

常用鼠标操作方法

从selenium.webdriver导入ActionChains类,该类提供多种鼠标操作方法

  • 右击操作:使用context_click()方法,传入目标元素参数
  • 双击操作:使用double_click()方法,传入目标元素参

 鼠标悬停用

element = driver.find_element_by_id("element_id")  # 定位元素
ActionChains(driver).move_to_element(element).perform()  # 鼠标悬用到元素上

拖拽操作

从selenium.webdriver导入ActionChains类,该类提供多种鼠标操作方法

source = driver.find_element_by_id("source_id")  # 源元素
target = driver.find_element_by_id("target_id")  # 目标元素
ActionChains(driver).drag_and_drop(source, target).perform()  # 从源元素拖拽到目标元素

8. 下拉框元素定位

  • 首先需要创建Select类对象
  • 通过webdriver.support.select导入Select类
  • 传递要定位的下拉框元素对象(可通过xpath获取)
  • 索引定位:select_by_index(),下标从0开始
  • 文本定位:select_by_visible_text(),通过选项显示文本
  • 值定位:select_by_value(),通过选项的value属性值

9.页面滚动操作

通过JavaScript脚本执行滚动操作

  • 第一个参数控制左右滚动
  • 第二个参数控制上下滚动
  • 执行方法:driver.execute_script(js脚本)

10. 页面截图操作

方法:driver.get_screenshot_as_file()

仅支持PNG格式

http://www.xdnf.cn/news/1251793.html

相关文章:

  • 《算法导论》第 8 章—线性时间排序
  • 【C语言】文件操作全解析
  • DevOps时代的知识基座革命:Gitee Wiki如何重构研发协作范式
  • Leetcode题解:739每日温度,用单调栈解决问题!
  • 飞算JavaAI开发平台:重构开发全流程——从需求到工程的智能化跃迁
  • Excel将整列值转换为字符串
  • C语言的数组与字符串练习题1
  • JavaScript DOM 元素节点操作详解
  • MaxKB 使用 MCP 连接 Oracle (免安装 cx_Oracle 和 Oracle Instant Client)
  • 【WAIC 2025】AI安全的攻防前线:合合信息AI鉴伪检测技术
  • kubeadm-k8s 中的 etcd 备份与恢复
  • Minio 高性能分布式对象存储
  • 部署 Zabbix 企业级分布式监控笔记
  • 消息队列的优缺点
  • ubuntu18.04在fstab文件中挂载硬盘失败,系统进入紧急模式的解决方法
  • Ubuntu设置
  • 分布式文件系统07-小文件系统的请求异步化高并发性能优化
  • TCP的拥塞控制
  • CSS :is () 与 :where ():简化复杂选择器的 “语法糖”
  • NodeJs学习日志(1):windows安装使用node.js 安装express,suquelize,sqlite,nodemon
  • 基于Hadoop的股票大数据分析可视化及多模型的股票预测研究与实现
  • 笔试——Day30
  • 如何快速掌握大数据技术?大四学生用Spark和Python构建直肠癌数据分析与可视化系统
  • 【数据结构与算法-Day 12】深入浅出栈:从“后进先出”原理到数组与链表双实现
  • 开疆智能ModbusTCP转Profinet网关连接EPSON机器人配置案例
  • Gitlab+Jenkins+K8S+Registry 建立 CI/CD 流水线
  • MATLAB深度学习之数据集-数据库构建方法详解
  • 无人机开发分享——基于行为树的无人机集群机载自主决策算法框架搭建及开发
  • 2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——决策树
  • 信息安全概述