Selenium的第三天打卡——Selenium应用(selenium元素选取以及浏览器操作)

article/2025/9/5 12:37:19

 Selenium 4 应用示例解析

目录

Selenium 4 应用示例解析

一、基本配置

二、浏览器设置(这之前没有html基础的朋友可以先去了解一下html哦)

三、元素定位方法

1.Selenium 4 元素的选中

①开发者模式

②观察代码

2.Selenium 4 元素抓取的核心内容

主要定位元素类型

3.八大定位方法

      确定唯一性

      八大定位方法

4.元素操作方法

   等待机制

    最佳实践

以下是对淘宝网站的登录以及搜索的自动化实现:

  登录(这里由于小编忘记淘宝密码了,则使用验证码登录)

  搜索功能

  注意事项

  隐式等待设置会影响所有元素定位操作:

  显式等待可以针对特定条件:

  改进建议

  验证码处理需要额外方案:

  页面跳转后建议增加等待:

  元素定位技巧

  开发者工具中使用 Ctrl+F 测试选择器:

  XPath 定位可作为备选方案

Selenium 浏览器操作总结

一、浏览器窗口控制

二、浏览器导航控制

三、浏览器刷新操作

四、多窗口处理示例

五、异常处理示例


以下代码展示了如何使用 Selenium 4 进行淘宝自动化操作,包括登录、搜索商品等常见网页交互功能。

一、基本配置

#webdriver是用于操作浏览器的
from selenium import webdriver
import time
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Bydriver_path = r"D:\tools\chromedriver.exe"#创建管理对象
service = Service(executable_path=driver_path)
#创建webdriver
driver = webdriver.Chrome(service=service)

二、浏览器设置

#设置浏览器最大化
driver.maximize_window()
#隐式等待 #打开网页,网页有过打开的较慢,会影响后续操作,为解决该问题,加上隐式等待
driver.implicitly_wait(10)
#打开想要操作的网页
driver.get("https://www.taobao.com")
在这之前没有html基础的朋友可以先去了解一下html哦

三、元素定位方法

1.Selenium 4 元素的选中
①进入网页后,点击f12,进入开发者模式,点击下图中我选中状态的蓝色图标即可使用鼠标选取元素

②鼠标移动到想要选取的元素位置上,右侧代码也会随之定位到相应位置

2.Selenium 4 元素抓取的核心内容
主要定位元素类型
  • 基础HTML元素:包括输入框(input)、按钮(button)、链接(a)、下拉框(select)、复选框(checkbox)、单选框(radio)、文本区域(textarea)、表格(table)、图片(img)。
  • 复合组件:如模态框(modal)、标签页(tab)、轮播图(carousel)、日期选择器(datepicker)、文件上传控件(file upload)。
3.八大定位方法

在定位之前先要确定元素的唯一性,一般情况下元素唯一才能定位成功,我们在开发者模式中可以使用CTRL+F得到一个输入框,按照格式输入我们的元素,即可检验出我们的元素是否唯一

这里的1of1即表示我们当前这个元素是可以使用的

八大定位方法:
from selenium.webdriver.common.by import By# ID定位
driver.find_element(By.ID, "element_id")# 类名定位  
driver.find_element(By.CLASS_NAME, "class_name")# 名称定位
driver.find_element(By.NAME, "name_attribute")# 标签名定位
driver.find_element(By.TAG_NAME, "tag_name")# 链接文本定位
driver.find_element(By.LINK_TEXT, "完整链接文本")# 部分链接文本定位
driver.find_element(By.PARTIAL_LINK_TEXT, "部分链接文本")# CSS选择器定位
driver.find_element(By.CSS_SELECTOR, "css_selector")# XPath定位  
driver.find_element(By.XPATH, "xpath_expression")
4.元素操作方法
  • 基础交互click(), send_keys(), clear(), submit()
  • 状态获取text, get_attribute(), is_displayed(), is_enabled(), is_selected()
  • 高级交互
from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.RETURN)from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(element).click().perform()driver.execute_script("arguments[0].scrollIntoView();", element)
   等待机制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 显式等待
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "element_id"))
)# 隐式等待(慎用)
driver.implicitly_wait(5)
    最佳实践
  • 定位策略:优先使用ID > CSS选择器 > XPath
  • 稳定性增强
# 相对XPath示例
driver.find_element(By.XPATH, "//div[contains(@class,'panel')]//button")# CSS属性选择器  
driver.find_element(By.CSS_SELECTOR, "input[name^='user']")
  • Page Object模式
class LoginPage:def __init__(self, driver):self.driver = driverself.username_field = (By.ID, "username")self.password_field = (By.NAME, "password")def login(self, username, password):self.driver.find_element(*self.username_field).send_keys(username)self.driver.find_element(*self.password_field).send_keys(password)
以下是对淘宝网站的登录以及搜索的自动化实现:
  登录(这里由于小编忘记淘宝密码了,则使用验证码登录)
#未登录状态下,所以先点击我的淘宝进行登录
driver.find_element(By.CSS_SELECTOR,'a[href="//i.taobao.com/my_itaobao"]').click()
time.sleep(10)#点击使用手机验证码方式登录(因为忘记密码了,小编这里用验证码方式)
driver.find_element(By.CSS_SELECTOR,'a[class="sms-login-tab-item"]').click()#输入11位数字的验证码
driver.find_element(By.CSS_SELECTOR, 'input[name="fm-sms-login-id"]').send_keys("XXXXXXXXXX")#因为验证码随时变动,这里没有自动填入验证码的操作,而是自动运行到那一阶段,迅速的手动填入验证码#点击登录
driver.find_element(By.CSS_SELECTOR,'a[class="send-btn-link"]').click()
time.sleep(10)
  搜索功能
# 搜索框输入
driver.find_element(By.CSS_SELECTOR, 'input[id="q"]').send_keys("电饭煲")# 点击搜索按钮
driver.find_element(By.CSS_SELECTOR, "button.btn-search").click()
  注意事项
  隐式等待设置会影响所有元素定位操作:
driver.implicitly_wait(10)  # 最多等待10秒
  显式等待可以针对特定条件:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "q"))
)
  改进建议
  验证码处理需要额外方案:
# 手动输入验证码
verification_code = input("请输入验证码:")
driver.find_element(By.CSS_SELECTOR, 'input[name="fm-smscode"]').send_keys(verification_code)
  页面跳转后建议增加等待:
time.sleep(5)  # 等待页面加载
  元素定位技巧
  开发者工具中使用 Ctrl+F 测试选择器:
document.querySelectorAll('a[href="//i.taobao.com/my_itaobao"]')
  XPath 定位可作为备选方案:
driver.find_element(By.XPATH, '//a[@class="sms-login-tab-item"]').click()

Selenium 浏览器操作总结

以下是浏览器操作的优化代码示例,涵盖窗口控制、导航控制和刷新操作。
一、浏览器窗口控制
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import timedriver_path = "chromedriver.exe"
# #创建管理对象
service = Service(executable_path=driver_path)
# #创建webdriver
driver = webdriver.Chrome(service=service)try:
# #最大化窗口driver.maximize_window()
#隐式等待driver.implicitly_wait(10)
# #打开网页driver.get("http://www.baidu.com")time.sleep(2)# #设置窗口的宽和高driver.set_window_size(480, 800)time.sleep(2)print(f"当前窗口尺寸: {driver.get_window_size()}")print(f"窗口位置: {driver.get_window_position()}")finally:driver.quit()
二、浏览器导航控制
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import timedriver_path = "chromedriver.exe"
service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service)try:driver.maximize_window()driver.implicitly_wait(10)driver.get("http://www.baidu.com")print("当前页面:", driver.title)time.sleep(2)driver.get("http://www.google.com")print("当前页面:", driver.title)time.sleep(2)#后退driver.back()print("后退到:", driver.title)time.sleep(2)#前进    driver.forward()print("前进到:", driver.title)time.sleep(2)finally:driver.quit()
三、浏览器刷新操作
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
import timedriver_path = "chromedriver.exe"
service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service)try:driver.maximize_window()driver.implicitly_wait(10)driver.get("http://www.baidu.com")time.sleep(2)#页面的刷新driver.refresh()print("第一次刷新完成")time.sleep(2)driver.find_element_by_tag_name('body').send_keys(Keys.F5)print("第二次刷新完成")time.sleep(2)driver.execute_script("location.reload();")print("第三次刷新完成")finally:driver.quit()
四、多窗口处理示例
main_window = driver.current_window_handle
all_windows = driver.window_handlesfor window in all_windows:if window != main_window:driver.switch_to.window(window)
五、异常处理示例
from selenium.common.exceptions import WebDriverExceptiontry:driver.refresh()
except WebDriverException as e:print(f"刷新失败: {str(e)}")

http://www.hkcw.cn/article/EcPGAVqICU.shtml

相关文章

智能仓储落地:机器人如何通过自动化减少仓库操作失误?

仓库作业的速度和准确性至关重要,尤其是在当前对无差错、高效作业的要求达到前所未有的环境下。每一个错误,无论是物品放错位置还是库存差异,都会在供应链中产生连锁反应,造成延误、增加成本,并最终影响客户满意度。 …

【Linux系统移植】Cortex-A8 Linux系统移植(超详细)

目录 前言 一、ARM开发板ARM简介RISC和CISCARM产品分布核心板S5pv210 SOC嵌入式系统开发方式 二、嵌入式系统组成为什么要系统移植内核移植框图 三、嵌入式开发环境搭建搭建开发环境总流程设置ubuntu与windows共享目录修改用户为root用户安装NFS服务器安装tftp服务器安装交叉编…

如何通过数据分析优化项目决策

通过数据分析优化项目决策需从明确数据分析目标、选择适当的数据分析工具、确保数据质量、建立数据驱动文化等方面入手,其中,明确数据分析目标是优化决策过程的基础,只有清晰明确的数据分析目标才能指导有效的数据采集与分析,避免…

纯前端实现图片伪3D视差效果

作者:vivo 互联网前端团队- Su Ning 本文通过depth-anything获取图片的深度图,同时基于pixi.js,通过着色器编程,实现了通过深度图驱动的伪3D效果。该方案支持鼠标/手势与手机陀螺仪双模式交互,在保证性能的同时&#x…

在ROS2(humble)+Gazebo+rqt下,实时显示仿真无人机的相机图像

文章目录 前言一、版本检查检查ROS2版本 二、步骤1.下载对应版本的PX4(1)检查PX4版本(2)修改文件名(3)下载正确的PX4版本 2.下载对应版本的Gazebo(1)检查Gazebo版本(2)卸载不正确的Gazebo版本(3)下载正确的Gazebo版本 3.安装bridge包4.启动 总结 前言 在ROS2的环境下&#xff…

Git的三种合并方式

在 Gitee(码云)中合并分支主要有三种方式:​普通合并(Merge Commit)、压缩合并(Squash Merge)​和变基合并(Rebase Merge)​。每种方式适用于不同的场景,各有…

微机系统-汇编语言入门

汇编语言及其程序设计 -1:汇编语言的语句格式 [名字] 操作符 操作数; [注释] 名字: 1. 是一种标识符。 2. 组成:A~Z,a~z; 0~9; 专用符号 ?. _$ 3. 限制&…

互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

一:并发 1.1MySQL并发事务访问相同记录 (1)读-读 不影响 (2)写-写 写的数据需要一个一个来,排队执行 (3)读-写 两次读…

影楼精修-AI追色算法解析

注意:本文样例图片为了避免侵权,均使用AIGC生成; AI追色是像素蛋糕软件中比较受欢迎的一个功能点,本文将针对AI追色来解析一下大概的技术原理。 功能分析 AI追色实际上可以理解为颜色迁移的一种变体或者叫做升级版,…

MATLAB中的table数据类型:高效数据管理的利器

MATLAB中的table数据类型:高效数据管理的利器 什么是table数据类型? MATLAB中的table是一种用于存储列向数据的数据类型,它将不同类型的数据组织在一个表格结构中,类似于电子表格或数据库表。自R2013b版本引入以来,t…

nacos服务注册

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。 1. 服务注册到nacos Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此…

【FPGA开发】Ubuntu16.04环境下配置Vivado2018.3—附软件包

文章目录 环境介绍关键步骤记录安装虚拟机及镜像安装vivadolicense导入 环境介绍 vivado:2018.3 虚拟机:vmware 16 pro 镜像:Ubuntu16.04 64位 所有相关软件压缩包: 链接:https://pan.quark.cn/s/fd2730b46b20 提取码…

安全帽检测算法AI智能分析网关V4守护工地/矿山/工厂等多场景作业安全

一、方案概述​ 在工业生产与建筑施工场景中,安全帽是保障人员安全的重要装备。但传统人工巡检效率低、易疏漏,难以满足现代安全管理需求。AI智能分析网关V4安全帽检测方案,借助人工智能与计算机视觉技术,实现作业现场安全帽佩戴…

【计算机网络】第2章:应用层—应用层协议原理

目录 1. 网络应用的体系结构 2. 客户-服务器(C/S)体系结构 3. 对等体(P2P)体系结构 4. C/S 和 P2P 体系结构的混合体 Napster 即时通信 5. 进程通信 6. 分布式进程通信需要解决的问题 7. 问题1:对进程进行编址…

Baklib云内容中台构建实践

云端资产整合实践 在数字化转型进程中,企业通常面临多系统数据孤岛与内容管理低效的挑战。Baklib云内容中台通过微服务架构设计,实现了跨平台文档、音视频及结构化数据的统一纳管,支持将分散在本地服务器、第三方云存储及业务系统中的数字资…

SOC-ESP32S3部分:17-I2C驱动实例-EEPROM温湿度传感器

飞书文档https://x509p6c8to.feishu.cn/wiki/KrlCwmlKcikvZ5knxEbcrewwn1c EEPROM 特别说明,目前ESP32S3由于IO数量少的原因,是没有连接底板的EEPROM的,我们这里只进行代码讲解,这个工程不能在板卡运行的。 我们学习基础课程时…

局域网内文件共享的实用软件推荐

软件介绍 在日常办公、学习或家庭网络环境里,局域网内文件共享是个常见需求。有一款免费的局域网共享软件非常适合这种场景。 这款局域网共享软件使用起来非常简单,不需要安装,直接点击就能使用。 软件下载 链接:​​https://p…

华为OD机试真题——AI面板识别(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

EasyRTC音视频实时通话助力微信小程序:打造低延迟、高可靠的VoIP端到端呼叫解决方案

一、方案概述​ 在数字化通信浪潮下,端到端实时音视频能力成为刚需。依托庞大用户生态的微信小程序,是实现此类功能的优质载体。基于WebRTC的EasyRTC音视频SDK,为小程序VoIP呼叫提供轻量化解决方案,通过技术优化实现低延迟通信&a…

YOLOv8 实战指南:如何实现视频区域内的目标统计与计数

文章目录 YOLOv8改进 | 进阶实战篇:利用YOLOv8进行视频划定区域目标统计计数1. 引言2. YOLOv8基础回顾2.1 YOLOv8架构概述2.2 YOLOv8的安装与基本使用 3. 视频划定区域目标统计的实现3.1 核心思路3.2 完整实现代码 4. 代码深度解析4.1 关键组件分析4.2 性能优化技巧…