Selenium自动化测试工具

devtools/2024/10/24 1:01:15/

一 .Selenium简介

  • 是一个用于Web应用程序测试的工具

Selenium的核心功能之一是测试软件在不同浏览器和操作系统上的兼容性,确保软件功能与用户需求的一致性,提升用户体验。

Selenium支持自动录制用户操作并生成多种编程语言的测试脚本,简化自动化流程,同时模拟用户行为执行JavaScript代码,处理动态加载内容。

  • 解决反爬问题与验证码处理

Selenium能有效解决网页反爬策略,如模拟浏览器操作和执行JavaScript,对于难以通过请求库获取的数据,Selenium提供了更高效的解决方案,尽管需要注意资源消耗。

1.主要优势

(1)降低技术门槛

selenium的使用无需深入关注逆向参数,因为它模拟的是正常用户的操作,从而降低了自动化测试和数据抓取的技术门槛,使得非技术人员也能轻松上手。

(2)解决网页反爬问题

爬虫领域,selenium通过模拟正常用户操作,能够有效绕过大部分网页的反爬机制,提高数据抓取的成功率和效率。

(3)自动化处理验证码

selenium在处理网站验证码方面具有优势,通过模拟正常用户行为,自动化处理验证码比逆向工程简单,提高了自动化流程的效率。

二. 安装与配置

1.安装Selenium

pip install
selenium==3.141.0  -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 如果浏览器自动更新了

就会出现 驱动版本和浏览器版本不一致  更新一下驱动版本就好了

三. 基本使用方法

1.导包与实例化与浏览器控制

import timefrom selenium import webdriver# 实例化驱动
browser = webdriver.Chrome()  # 单词C是大写的 后面的括号不能漏
browser.maximize_window()  # 最大化
# browser.minimize_window() # 最小化
browser.set_window_size(500, 1000)  # 自定义尺寸 宽500 高1000
browser.get("https://www.baidu.com/")  # get方法 操作浏览器 打开对应的url页面
#  一个标签页 访问这两个url
browser.get("https://www.douban.com/")browser.back()  # 后退  百度browser.forward()  # 前进 豆瓣
time.sleep(2)
browser.refresh()  # 刷新页面
time.sleep(2)
browser.save_screenshot("豆瓣.png")browser.close()  # 关闭当前标签页 如果标签页只有一个 就会关闭浏览器
# browser.quit() #关闭浏览器

2.selenium的基本使用

from selenium import webdriver
Chrome浏览器 实例化
browser= webdriver.Chrome()
browser.get('url') #访问页面
browser.maximize_window() # 窗口最大化
browser.minimize_window() # 最小化到任务栏
browser.set_window_size(600,700) # 自定义大小 浏览器宽600 高700
browser.save_screenshot('image.png') # 当前窗口截图
以png后缀结尾 源码写的!!!
browser.refresh() # 刷新页面
browser.back() # 后退 浏览器左上角的回退按钮
browser.forward() # 前进 浏览器左上角的前进按钮
browser.close() # 关闭当前标签页
browser.quit() # 关闭浏览器。

3.元素定位

(1)ID定位

ID定位是利用元素的唯一ID属性来寻找页面上的元素。这种方法快速且精确,前提是元素的ID在页面中是唯一的,适用于直接通过ID访问元素的场景。

(2)class和name定位

class和name定位分别通过元素的class属性和name属性进行定位。这两种方法在处理具有相同样式或名称的多个元素时非常有用,可以一次性定位到多个元素。

(3)CSS选择器和XPath定位

CSS选择器和XPath定位提供了更高级的选项,允许通过CSS规则或XPath路径表达式来定位元素。它们灵活强大,能够处理复杂的页面结构,但需要更多的技术知识。

from selenium import webdriver
Chrome浏览器 实例化
browser= webdriver.Chrome()
browser.get('url') #访问页面
browser.find_element_by_id('id值') # ID定位
browser.find_element_by_class_name('class属性值') # class 定位
browser.find_element_by_name('name值') # name 定位
browser.find_element_by_css_selector('css选择器'). # css选择器定位
browser.find_element_by_xpath('xpath规则') # xpath定位
'''需求想让selenium 操作浏览器 去访问百度搜索 某个关键字的文字真人操作1: 访问百度2:搜索框 输入关键字 点击百度一下按钮自动化selenium自动化是模拟真人的步骤1:访问百度页面2: 元素定位 定位到指定元素(标签)  在这个需求中 是要定位到输入框3: 输入框 输入对应的关键字4: 定位到百度一下这个元素  进行点击操作find_element 查找元素的方法 返回第一个符合条件的元素find_elements 查找元素的方法 查找所有的符合条件的元素  返回的是列表'''
from selenium import webdriver# 实例化驱动
browser = webdriver.Chrome()  # 单词C是大写的 后面的括号不能漏# 1:访问百度页面
browser.get("https://www.baidu.com/")#  2: 元素定位 定位到指定元素(标签)
# 3: 输入框 输入对应的关键字  send_keys 指定位置 输入内容
browser.find_element_by_id("kw").send_keys("南风")  # 传id的值
browser.find_element_by_class_name("s_ipt").send_keys("南风2")  # 传class属性值
browser.find_element_by_name("wd").send_keys("南风3")  # 传name属性的值
browser.find_element_by_xpath('//input[@id="kw"]')  # 传xpath规则
browser.find_element_by_css_selector('#kw')  # 传选择器值# 4: 定位到百度一下这个元素  进行点击操作
import time
browser.find_element_by_id("su").click() # click点击的方法
time.sleep(4)
# page_source返回响应的内容
print(browser.page_source)

4.selenium的其他方法

from selenium import webdriver
Chrome浏览器 实例化
browser= webdriver.Chrome()
browser.get('url') #访问页面
browser.title # 当前标签页标题
browser.current_url # 当前url
size 返回元素大小
text 获取元素的文本
get_attribute("xxx") 获取属性值;xxx:要获取的属性
is_displayed() 判断元素是否可见
is_enabled() 判断元素是否可用
注意
size、text、title、current_url:为属性,调用时无括号;如:xxx.size
title、current_url:使用浏览器实例化对象直接调用; 如:
browser.title
from selenium import webdriver# 实例化驱动
browser = webdriver.Chrome()  # 单词C是大写的 后面的括号不能漏# 1:访问百度页面
browser.get("https://www.baidu.com/")
print(browser.title) # 当前标签页标题
print(browser.current_url) # 当前url
# find_element_by_id
print(browser.find_element_by_id('kw')) # 搜索框的元素
print(browser.find_element_by_id('kw').size) # 返回元素大小
content_element = browser.find_element_by_xpath('//span[@class="title-content-title"]')print(content_element.text)# 获取元素的文本
print(content_element.get_attribute('class'))
print(content_element.is_displayed()) # 判断元素是否可见
print(content_element.is_enabled()) # 判断元素是否可用
'''browser.title # 当前标签页标题browser.current_url # 当前urlsize 返回元素大小text 获取元素的文本get_attribute("xxx") 获取属性值;xxx:要获取的属性is_displayed() 判断元素是否可见is_enabled() 判断元素是否可用
'''


http://www.ppmy.cn/devtools/128317.html

相关文章

智能时代摩托车一键启动无钥匙进入感受科技前线

向智能化与高性能迈进,技术创新与绿色转型引领摩托车行业智能化出行。 摩托车一键启动无钥匙进入功能是一种先进的车辆控制系统,它允许驾驶员在不使用传统机械钥匙的情况下,通过智能感应技术自动解锁和启动摩托车。这种系统通常包括一个智能钥匙&#x…

未来AI的学习能力会达到怎样的水平?

​ 大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 AI工具集1:大厂AI工具【共2…

SQL注入原理、类型、危害与防御

SQL注入的原理概念 SQL注入是一种常见的网络攻击技术,攻击者通过在Web应用程序的输入字段中注入恶意构造的SQL代码,以欺骗后端数据库执行非预期的SQL命令。这种攻击可以导致数据泄露、权限提升、数据篡改甚至系统瘫痪。SQL注入可以分为多种类型&#xf…

【毕业设计】基于SpringBoot的网上商城系统

前言 🔥本系统可以选作为毕业设计,运用了现在主流的SSM框架,采用Maven来帮助我们管理依赖,所选结构非常合适大学生所学的技术,非常合适作为大学的毕业设计,难以适中。 🔥采用技术:Sp…

第二十七篇:传输层讲解,TCP系列一

一、传输层的功能 ① 分割与重组数据 传输层也要做数据分割,所以必然也需要做数据重组。 ② 按端口号寻址 IP只能定位数据哪台主机,无法判断数据报文应该交给哪个应用,传输层给每个应用都设置了一个编号,这个编号就是端口&…

【Flutter】状态管理:Provider状态管理

在 Flutter 开发中,状态管理是一个至关重要的部分。随着应用的规模和复杂性增加,简单的局部状态管理(如 setState() 和 InheritedWidget)可能变得难以维护和扩展。Provider 是一种推荐的、广泛使用的 Flutter 状态管理工具&#x…

hive中date_add的一点小说明

在上家公司做理赔数据迁移的时候,遇到一个问题: 理赔的任务都是有时间节点的,有的是到天的,有的是到小时的,有的是到分钟的等等。具体的业务是这样的:算一个地区前30天的理赔金额(口径是到分钟…

Excel使用技巧:视图-新建窗口,方便对比同一个文件里的数据;视图-冻结窗格,方便 数据滚动的时候标题栏不动。

Excel的正确用法: Excel是个数据库,不要随意合并单元格。 数据输入的时候一定要按照行列输入,中间不要留空,不然就没有关联。 视图-新建窗口,方便对比同一个文件里的数据 在同一个文件中,为了避免来回在…