Selenium在Pyhton应用

目录

[1. selenium的基本原理](#1. selenium的基本原理)

[2. selenium环境的搭建步骤](#2. selenium环境的搭建步骤)

[3. 元素的定位和操作](#3. 元素的定位和操作)

4.元素的基本属性方法

5.浏览器的操作方法

6.三种等待

强制等待

显示等待

隐式等待

[7. 键盘与鼠标的操作](#7. 键盘与鼠标的操作)

鼠标悬停用

拖拽操作

[8. 下拉框元素定位](#8. 下拉框元素定位)

9.页面滚动操作

[10. 页面截图操作](#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 time

from selenium import webdriver

driver = 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 time

    from selenium import webdriver
    from selenium.webdriver.common.by import By

    driver = 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 EC

driver = 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. 页面切换

相关推荐
蒋星熠24 分钟前
.NET技术深度解析:现代企业级开发指南
人工智能·python·深度学习·微服务·ai·性能优化·.net
BatyTao1 小时前
Selenium核心技巧:元素定位与等待策略
selenium·测试工具
做科研的周师兄1 小时前
【机器学习入门】3.2 ALS算法——从评分矩阵到精准推荐的核心技术
人工智能·python·深度学习·线性代数·算法·机器学习·矩阵
二闹2 小时前
一文搞懂Python装饰器,还能用它给代码加权限锁!
后端·python
励志不掉头发的内向程序员2 小时前
从零开始的python学习——函数(2)
开发语言·python·学习
Gyoku Mint2 小时前
猫猫狐狐的“你今天有点怪怪的”侦察日记
人工智能·python·深度学习·神经网络·自然语言处理·pycharm·数据分析
盼小辉丶2 小时前
PyTorch实战——GoogLeNet与Inception详解
pytorch·python·深度学习
梓羽玩Python3 小时前
AiPy 你的AI打工牛马来了!真正的开源Agent神器!
人工智能·python·github
AI 嗯啦3 小时前
爬虫-----最全的爬虫库介绍(一篇文章让你成为爬虫大佬,爬你想爬)
开发语言·爬虫·python
站大爷IP3 小时前
Python3 迭代器与生成器详解:从入门到实践
python