Python Selenium 使用指南
Selenium 是一个用于自动化 Web 浏览器交互的强大工具,常用于网页测试、数据抓取和自动化任务。以下是 Python 中 Selenium 的详细使用说明。
安装 Selenium
首先需要安装 Selenium 库和浏览器驱动:
pip install selenium
然后下载对应浏览器的驱动:
-
Chrome: ChromeDriver
-
Firefox: GeckoDriver
-
Edge: EdgeDriver
将驱动放在系统 PATH 路径中,或指定驱动路径。
基本使用
启动浏览器
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys# 使用 Chrome 浏览器
driver = webdriver.Chrome() # 或指定路径 webdriver.Chrome('/path/to/chromedriver')# 使用 Firefox
# driver = webdriver.Firefox()# 访问网页
driver.get("https://www.google.com")
常用操作
# 查找元素
search_box = driver.find_element(By.NAME, "q") # 通过name属性查找# 输入内容
search_box.send_keys("Python Selenium")# 模拟按键
search_box.send_keys(Keys.RETURN) # 回车# 点击元素
button = driver.find_element(By.CSS_SELECTOR, "input[type='submit']")
button.click()# 获取元素属性
print(button.get_attribute("value"))# 获取文本内容
print(driver.find_element(By.TAG_NAME, "h1").text)# 执行JavaScript
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")# 等待(隐式等待)
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, "myDynamicElement"))
)
选择元素的方式
# 通过ID
driver.find_element(By.ID, "id_name")# 通过name属性
driver.find_element(By.NAME, "name")# 通过XPath
driver.find_element(By.XPATH, "//input[@name='q']")# 通过链接文本
driver.find_element(By.LINK_TEXT, "Continue")# 通过部分链接文本
driver.find_element(By.PARTIAL_LINK_TEXT, "Conti")# 通过标签名
driver.find_element(By.TAG_NAME, "h1")# 通过类名
driver.find_element(By.CLASS_NAME, "content")# 通过CSS选择器
driver.find_element(By.CSS_SELECTOR, "p.content")
高级功能
处理弹窗和警告
# 获取并接受alert
alert = driver.switch_to.alert
print(alert.text)
alert.accept()# 取消alert
alert.dismiss()# 在prompt中输入文本
alert.send_keys("text")
alert.accept()
切换窗口和iframe
# 获取当前所有窗口句柄
all_handles = driver.window_handles# 切换到新窗口
driver.switch_to.window(all_handles[1])# 切换回原窗口
driver.switch_to.window(all_handles[0])# 切换到iframe
iframe = driver.find_element(By.TAG_NAME, "iframe")
driver.switch_to.frame(iframe)# 切回主文档
driver.switch_to.default_content()
处理下拉选择框
from selenium.webdriver.support.ui import Selectselect = Select(driver.find_element(By.ID, "dropdown"))# 通过可见文本选择
select.select_by_visible_text("Option 1")# 通过value属性选择
select.select_by_value("1")# 通过索引选择
select.select_by_index(0)
浏览器操作
# 前进和后退
driver.forward()
driver.back()# 刷新页面
driver.refresh()# 获取当前URL
print(driver.current_url)# 获取页面标题
print(driver.title)# 获取页面源代码
print(driver.page_source)# 设置窗口大小
driver.set_window_size(1024, 768)# 最大化窗口
driver.maximize_window()# 最小化窗口
driver.minimize_window()# 全屏
driver.fullscreen_window()
截图和保存
# 截屏保存
driver.save_screenshot("screenshot.png")# 获取元素截图
element = driver.find_element(By.TAG_NAME, "h1")
element.screenshot("element.png")
使用Cookies
# 获取所有cookies
print(driver.get_cookies())# 添加cookie
driver.add_cookie({"name": "test", "value": "123"})# 获取指定cookie
print(driver.get_cookie("test"))# 删除cookie
driver.delete_cookie("test")# 删除所有cookies
driver.delete_all_cookies()
无头模式
无头模式运行浏览器,不显示GUI界面:
from selenium.webdriver.chrome.options import Optionsoptions = Options()
options.add_argument("--headless") # 启用无头模式
options.add_argument("--disable-gpu") # 禁用GPU加速driver = webdriver.Chrome(options=options)
关闭浏览器
# 关闭当前窗口
driver.close()# 关闭所有窗口并退出浏览器
driver.quit() # 推荐使用,确保释放资源
实际示例:自动登录网站
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time# 初始化浏览器
driver = webdriver.Chrome()try:# 打开登录页面driver.get("https://example.com/login")# 输入用户名和密码username = driver.find_element(By.ID, "username")password = driver.find_element(By.ID, "password")username.send_keys("your_username")password.send_keys("your_password")# 提交表单password.send_keys(Keys.RETURN)# 等待登录完成time.sleep(2)# 验证是否登录成功if "Dashboard" in driver.title:print("登录成功!")else:print("登录失败")finally:# 关闭浏览器driver.quit()
注意事项
-
元素定位:确保使用稳定的定位方式,避免使用可能变化的XPath
-
等待机制:合理使用隐式和显式等待,避免硬性等待(time.sleep)
-
异常处理:添加try-except块处理可能的异常
-
资源释放:始终在finally块中调用driver.quit()释放资源
-
反爬措施:部分网站有反爬机制,需合理设置请求间隔和User-Agent
相关文章:
Python Selenium 使用指南
Selenium 是一个用于自动化 Web 浏览器交互的强大工具,常用于网页测试、数据抓取和自动化任务。以下是 Python 中 Selenium 的详细使用说明。 安装 Selenium 首先需要安装 Selenium 库和浏览器驱动: pip install selenium 然后下载对应浏览器的驱动&…...
Cribl 对数据源进行过滤-01
先说一个项目中实际的例子: Cribl 利用filter expression 来过滤 data, 举个例子: source1: sourcerouter=A, source 2: sourcerouter=B, 这个时候,可以要把他们合并起来: sourcerouter=A || sourcerouter=B 来进行过滤想要的数据。 最后可以使用一个pipeline 来对数据进行…...
python 通过 pymysql 获取 select count(*) xxx 的数量
在使用 pymysql 库来获取 SELECT COUNT(*) 语句的结果时,你可以通过以下步骤实现: 安装 pymysql:如果你还没有安装 pymysql,可以通过 pip 安装它。 pip install pymysql连接到数据库:使用 pymysql.connect() 方法连接…...
定时任务延迟任务
二者的区别: 定时任务:有固定周期的,有明确的触发时间。 延迟任务:没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行࿰…...
【动手学深度学习】1.1~1.2 机器学习及其关键组件
目录 一、引言1.1. 日常生活中的机器学习1.2. 机器学习中的关键组件1)数据2)模型3)目标函数4)优化算法 一、引言 1.1. 日常生活中的机器学习 应用场景: 以智能语音助手(如Siri、Alexa)的唤醒…...
LLaVA-MoD:基于MoE结构和蒸馏训练方法,训练轻量化多模态大模型!!
摘要:我们介绍了LLaVA-MoD,这是一个旨在高效训练小型多模态语言模型(s-MLLM)的创新框架,通过从大规模多模态语言模型(l-MLLM)中提取知识来实现。我们的方法解决了多模态语言模型(MLL…...
YOLOv8 的双 Backbone 架构:解锁目标检测新性能
一、开篇:为何踏上双 Backbone 探索之路 在目标检测的领域中,YOLOv8 凭借其高效与精准脱颖而出,成为众多开发者和研究者的得力工具。然而,传统的单 Backbone 架构,尽管已经在诸多场景中表现出色,但仍存在一…...
SSRF(服务器端请求伪造)基本原理靶场实现
1、漏洞原理 攻击者通过构造恶意请求,诱使服务器向内部系统或第三方服务发起非预期的网络请求。其核心在于 服务器信任了不可信的用户输入,并基于该输入发起网络操作。 2、攻击场景与利用方式 1. 基础利用 攻击类型示例Payload目标读取本地文件file://…...
自动化测试脚本点击运行后,打开Chrome很久??
亲爱的小伙伴们大家好。 小编最近刚换了电脑,这几天做自动化测试发现打开Chrome浏览器需要等待好长时间,起初还以为代码有问题,或者Chromedriver与Chrome不匹配造成的,但排查后发现并不是!! 在driver.py中…...
Oracle中如何解决FREE BUFFER WAITS
基于性能上的考虑,服务器进程在扫描LRU主列的同时,会将脏块移至LRU-W列,如果发现没有足够可用(可替换)的BUFFER CACHE,进程并不会无止尽地扫描整条LRU主列,而是在扫描到某个阀值(该阀…...
OpenHarmony开源鸿蒙兼容性测试常见问题解答分享
OpenHarmony 兼容性测评主要是验证合作伙伴的设备和业务应用满足 OpenHarmony 开源兼容性定义的技术要求,确保运行在 OpenHarmony 上的设备和业务应用能稳定、正常运行,同时使用 OpenHarmony 的设备和业务应用有一致性的接口和业务体验。 一、兼容性测评…...
Android trace presentFence屏幕显示的帧
Android trace presentFence屏幕显示的帧 presentFence :当帧成功显示到屏幕时,present fence就会signal。 FrameMissed/GpuFrameMissed/HwcFrameMissed表示上一次合成的结果,当SurfaceFlinger合成后显示到屏幕上,present fence就…...
【520特辑】情人节脑影像绘图
祝大家520快乐! 永远爱自己! 1.Brain Net基于节点画爱心 clear all; clc;t linspace(0, 2*pi, 30); x 16*sin(t).^3; y 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t); z zeros(size(t));[X,Y] meshgrid(linspace(-10,10,5), linspace(-10,10,5)); X …...
Linux服务器配置深度学习环境(Pytorch+Anaconda极简版)
前言: 最近做横向需要使用实验室服务器跑模型,之前用师兄的账号登录服务器跑yolo,3张3090一轮14秒,我本地一张4080laptop要40秒,效率还是快很多,(这么算一张4080桌面版居然算力能比肩3090&#…...
如何理解大模型的幻觉输出及RAG技术的应用与实战案例
导读:大语言模型(LLM)在当今技术领域中扮演着越来越重要的角色,但其“幻觉输出”问题却成为实际应用中的痛点。本文将带你深入剖析这一现象的定义、表现形式及成因,并探讨如何通过RAG(检索增强生成…...
std::vector<>.emplace_back
emplace_back() 详解:C 就地构造的效率革命 emplace_back() 是 C11 引入的容器成员函数,用于在容器尾部就地构造(而非拷贝或移动)元素。这一特性显著提升了复杂对象的插入效率,尤其适用于构造代价较高的类型。 一、核…...
卷积神经网络(CNN)学习率调整完全指南:从理论到PyTorch实践
引言 学习率是训练卷积神经网络(CNN)最重要的超参数之一,合理调整学习率可以显著提高模型性能、加速收敛并避免训练失败。本文将全面解析CNN学习率调整的技术与方法,涵盖基础概念、常用策略、PyTorch实现以及实用技巧。 一、学习率为什么如此重要&…...
KLEC--基于知识学习的演化计算算法
KLEC–基于知识学习的演化计算算法 title: Knowledge Learning for Evolutionary Computation author: Yi Jiang, Zhi-Hui Zhan, Kay Chen Tan, Jun Zhang. journal: IEEE TRANSACTIONS ON EVOLUTIONARY COMPUTATION (TEVC) DOIÿ…...
Git查看指定作者提交命令
要查看 Git 仓库中某个作者的提交记录,可以使用 git log 命令结合 --author 选项。以下是具体用法和示例: 基础命令 git log --author"作者名"作用:列出指定作者的所有提交记录。示例:查找作者名为 John Doe 的提交&am…...
隐形安全感
凌晨两点,手机突然震动。合作三年的化工原料供应商发来紧急消息:“一批次环氧树脂需要连夜从南京调往广州,但合作多年的物流公司临时爽约,能帮忙想想办法吗?” 我盯着屏幕愣了几秒。这类危险品运输从来不是简单的“拉…...
代码随想录算法训练营 Day52 图论Ⅲ 岛屿问题Ⅱ 面积 孤岛 水流 造岛
图论 题目 101. 孤岛的总面积 计算孤岛总面积,一个想法是将相邻的陆地的位置置为 0,最后计算孤岛面积中最小的一个 #include <iostream> #include <vector> #include <queue>using namespace std;int sum 0; int dir[4][2] {0,-1…...
实用 Git 学习工具推荐:Learn Git Branching
https://learngitbranching.js.org/?localezh_CN 网站概述 Learn Git Branching 是一个面向开发者的交互式 Git 学习平台,专为那些希望通过实践掌握 Git 高级用法的用户设计。网站采用游戏化的界面和渐进式挑战,让复杂的 Git 概念变得直观易懂。无论是…...
物流项目第三期(统一网关、工厂模式运用)
前两期: 物流项目第一期(登录业务)-CSDN博客 物流项目第二期(用户端登录与双token三验证)-CSDN博客 为什么要有网关? 通过前面的课程我们已经完成了四个端的登录,但是我们并没有对登录后的请…...
安卓settings单双屏显示
Settings/src/com/android/settings/homepage/SettingsHomepageActivity.java的onCreate方法中,创建布局之前会通过ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this);去获取是否使用嵌入式显示。 mIsEmbeddingActivityEnabled ActivityEmbeddingUtils.is…...
SpringCloud+Vue实现大文件分片下载(支持开始、暂停、继续、取消)
1. 实现效果 http://localhost:8089/#/demo 所有代码已提交至 https://github.com/SJshenjian/cloud.git与 https://github.com/SJshenjian/cloud-web.git中,欢迎star 2. 后端核心代码 FeignClient(value "download", contextId "download"…...
RK3576 Android 14.0 SDK开发指南(第一集)
RK3576 Android 14.0 SDK代码编译 SDK下载到本地后大概70多个G 下载后要做个校验 解压后内核源码 kernel代码路径说明 Android14支持6.1 版本的kernel,kernel源码在工程中kernel-6.1目录下 Lunch项说明 一键编译命令 ./build.sh -UKAupSoc RK3576 SDK默认没有开…...
【C/C++】现代C++线程池:从入门到生产级实现
文章目录 现代C线程池:从入门到生产级实现🧠 What Is a Thread Pool?🧩 Why Use a Thread Pool?🔰 Part 1: Basic Thread Pool (Beginner)🔧 Minimal Working Code:✅ Usage: 🧑🔬 Part 2: …...
后期:daplink
问题描述: 问题一:总工程,USB插入能识别到dap,但有个黄色的感叹号!现在连感叹号都没有了。 重点跟踪了枚举的几个函数,差异点就是有个工厂描述符没有枚举到。 问题二: 下载后,目标板,没有自动复位。 问题三:未移植daplink的时候,虚拟串口是收发正常,貌似没有映射到…...
Android SharedPreferences:从零到一的全面解析与实战指南
简介 SharedPreferences是Android平台提供的一种轻量级键值对存储方案,虽然看似简单,但在实际开发中却蕴含着丰富的技术细节和最佳实践。本文将从基本概念出发,深入分析其源码实现原理,探讨企业级开发中的应用技巧,并提供完整的代码示例,帮助开发者全面掌握这一重要数据…...
推扫式高光谱相机VIX-N230重磅发布——开启精准成像新时代
随着各行业对高光谱成像技术需求的持续增长,市场对于高分辨率、高灵敏度以及快速成像的高光谱相机的需求愈发迫切。中达瑞和凭借多年的行业经验和技术积累,敏锐捕捉到这一市场趋势,正式推出全新一代推扫式可见光近红外高光谱相机——VIX-N230…...
实现rpc通信机制(待定)
一、概述 (1)rpc(remote procedure call, 远程接口调用),就像在本地调用函数一样,是应用组成服务内部分布式的基础功能。应用场景是在内网中的计算,比如:(a) 为上传的一张图片加水印、…...
STM32--串口函数
USART_GetFlagStatus() 用于获取某个串口的寄存器中的某个标志位的状态,和中断无关。 USART_ClearFlag() 用于清楚串口寄存器中的标志位的状态,和中断无关。 USART_ITConfig() 使能或禁用指定的 USART 中断。 USART_ITConfig(USART1, USART_IT_TXE, …...
Linux跨网络通信中IP与MAC的作用
是的,MAC地址和IP地址分别属于OSI模型的不同层次,并在数据封装过程中被添加到不同的位置: 1. MAC地址(数据链路层) 作用层级:数据链路层(第二层)。封装位置:添加到数据链…...
Facebook隐私保护的成与败:一场对用户信任的考验
引言 在这个信息爆炸的时代,Facebook作为全球最大的社交网络平台之一,其隐私保护政策和实践一直是公众关注的焦点。随着数据泄露事件的频发,Facebook在隐私保护方面的成与败,不仅关系到其自身的声誉,更是对用户信任的…...
面试算法刷题3(核心+acm)
102. 二叉树的层序遍历 递归法 核心代码模式 不断递归根节点,根据深度来判断加在哪一层上。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(in…...
[Java] idea的调试介绍
1. 什么是调试? 调试就是帮助我们去寻找代码中的bug,优化代码的过程。调试对于程序员来说非常重要,能帮助我们更容易去找到代码中的错误,去修复。 2. idea集成开发环境的调试 下面我就介绍下idea集成开发环境下的调试ÿ…...
winrm ‘Protocol‘ object has no attribute ‘run_ps‘
在使用 winrm 库时遇到错误 ‘Protocol’ object has no attribute ‘run_ps’ 通常意味着你正在尝试使用一个不存在的属性或方法。在 Python 中使用 winrm 库时,正确的调用方式应该使用 client 对象来运行 PowerShell 命令,而不是直接在 Protocol 对象上…...
WHAT - CSS 中的 min-width
文章目录 基本语法常见取值使用场景举例min-width: 0为什么 min-width: 0 重要?场景演示提示 注意事项 在 WHAT - CSS 中的 width 中我们已经详细介绍过 width。那为什么 CSS 还要提供一个 min-width? 阅读本文前可先阅读 MDN - min-width。 min-width…...
测试W5500的第2步_使用ioLibrary库创建TCP客户端
ioLibrary库下载地址:文件下载地址:https://gitee.com/wiznet-hk/STM32F10x_W5500_Examples 源文件下载地址:https://gitee.com/wiznet-hk 没有注册的,只能复制粘贴了。 本文介绍了如何初始化STM32的硬件资源,配置W5500的网络参数ÿ…...
深度学习中的正则化方法与卷积神经网络基础
笔记 1 正则化方法 1.1 什么是正则化 防止模型过拟合(训练集效果好, 测试集效果差), 提高模型泛化能力 一种防止过拟合, 提高模型泛化能力的策略 L1正则: 需要通过手动写代码实现 L2正则: SGD(weight_decay) dropout BN 1.2 Dropout正则化 让神经元以p概率随机死亡, 每…...
pg_dump
以下是 PostgreSQL 中 pg_dump 命令的 核心参数 及 使用示例 的详细说明: 一、核心参数分类及说明 pg_dump 主要用于备份单个数据库,支持多种格式和灵活的控制选项。以下是其关键参数分类: 1. 连接参数 参数说明-h, --hostHOST数据库服务器…...
css使用clip-path属性切割显示可见内容
1. 需求 想要实现一个渐变的箭头Dom,不想使用svg、canvas去画,可以考虑使用css的clip-path属性切割显示内容。 2. 实现 <div class"arrow">箭头 </div>.arrow{width: 200px;height: 60px;background-image: linear-gradient(45…...
系统设计——项目设计经验总结1
摘要 在系统设计的时候,注意域的区分,功能区分、类的区分、方法区分范围和定义。在系统设计的时候的,需要思考类、方法在什么情况下会涉及到修改,遵循记住:一个类应该只有一个原因被修改! 当不满足&#x…...
如何在WordPress网站上添加即时聊天功能
在 WordPress 网站上添加即时聊天功能既简单又有益。近年来,即时聊天已经有了长足的发展,融入了强大的交流和自动化功能,类似于流行的人工智能聊天机器人。无论您是想提高销售转化率还是将人工智能整合到客户服务流程中,在 WordPr…...
[luogu12542] [APIO2025] 排列游戏 - 交互 - 博弈 - 分类讨论 - 构造
传送门:https://www.luogu.com.cn/problem/P12542 题目大意:给定一个长为 n n n 的排列和一张 m m m 个点 e e e 条边的简单连通图。每次你可以在图上每个点设置一个 0 ∼ n − 1 0\sim n-1 0∼n−1、两两不同的权值发给交互库,交互库会…...
图像处理基础知识
OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 信息是自然界物质运动总体的一个重要方面,人们认识世界和改造世界就是要获得各种各样的图像信息,这些信息是人类获得外界信息的主要来源。大约有70%的信息是通过人眼获得的。近代科学研…...
使用MybatisPlus实现sql日志打印优化
背景: 在排查无忧行后台服务日志时,一个请求可能会包含多个执行的sql,经常会遇到SQL语句与对应参数不连续显示,或者参数较多需要逐个匹配的情况。这种情况下,如果需要还原完整SQL语句就会比较耗时。因此,我…...
HarmonyOS5云服务技术分享--ArkTS开发Node环境
✨ 你好呀,开发者小伙伴们!今天我们来聊聊如何在HarmonyOS(ArkTS API 9及以上)中玩转云函数,特别是结合Node.js和HTTP触发器的开发技巧。文章会手把手带你从零开始,用最接地气的方式探索这个功能࿰…...
水利数据采集MCU水资源的智能守护者
水利数据采集仪MCU,堪称水资源的智能守护者,其重要性不言而喻。在水利工程建设和水资源管理领域,MCU数据采集仪扮演着不可或缺的角色。它通过高精度的传感器和先进的微控制器技术,实时监测和采集水流量、水位、水质等关键数据&…...
深度学习之用CelebA_Spoof数据集搭建一个活体检测-用MNN来推理时候如何利用Conan对软件包进行管理
我为什么用Conan 前面的文章:深度学习之用CelebA_Spoof数据集搭建一个活体检测-训练好的模型用MNN来推理有提到怎么使用MNN对训练好的模型进行推理,里面并没有提到我是怎么编译和进行代码依赖包的管理的详细步骤,在这里我是用的是Conan:一个…...