当前位置: 首页 > 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格式

11. 警告框

获取警告框元素

通过find_element和XPath定位警告框触发元素,对定位到的元素执行click()操作

  • 使用switch_to.alert切入警告框
  • 获取文本:通过alert对象的text属性获取提示信息
关闭警告框的方法

使用accept()方法模拟点击确定按钮

使用dismiss()方法模拟点击取消按钮

即使警告框界面上没有显示取消按钮,调用dismiss()方法仍可取消

输入型警告框处理

对于需要输入内容的警告框,使用send_keys()方法

12. 页面切换

http://www.dtcms.com/a/318682.html

相关文章:

  • Java 大视界 -- Java 大数据机器学习模型在电商用户生命周期价值评估与客户关系精细化管理中的应用(383)
  • 应急响应排查(windows版)
  • Vue计算属性详解2
  • Python Pandas.lreshape函数解析与实战教程
  • 机器学习模型调优实战指南
  • 关于应急响应的那些事
  • 第14届蓝桥杯Scratch选拔赛初级及中级(STEMA)真题2023年3月12日
  • 人工智能-python-机器学习实战:特征降维、PCA与KNN的核心价值解析
  • Linux: NFS 服务部署与autofs自动挂载的配置
  • 分隔串处理方法
  • SQL注入SQLi-LABS 靶场less51-57详细通关攻略
  • 【2026版】JVM面试题
  • K8S的POD数量限制
  • 敏捷协作平台推荐:Jira、PingCode、Tapd等15款
  • C++ - 仿 RabbitMQ 实现消息队列--网络通信协议设计
  • 力扣-42.接雨水
  • 云平台托管集群:EKS、GKE、AKS 深度解析与选型指南-第二章
  • java 桌面应用程序基本框架
  • 【算法训练营Day21】回溯算法part3
  • C语言:指针(1-2)
  • 亚马逊新品实现快速起量:如何设置有效的广告竞价策略
  • Java保姆级新手教程第三章(方法与数组)
  • 亚马逊广告进阶指南:广告转化的基本原理
  • 前端性能优化实战:电商首页从 10s 加载到 1s 的踩坑与复盘
  • 大数据存储域——HDFS存储系统
  • 在LLM小型化趋势下,AI Infra需要做出哪些相应调整?
  • 用 “私房钱” 类比闭包:为啥它能访问外部变量?
  • 日记研究:一种深入了解用户真实体验的UX研究方法
  • 【2025CVPR-目标检测方向】FIRE:通过频率引导重建误差对扩散生成的图像进行鲁棒检测
  • 2025AI论文工具测评?个人实测5款AI工具论文写作使用体验对比