Python selenium 库

Selenium 是一个用于自动化 Web 浏览器操作的强大工具,广泛应用于 Web 应用程序测试、网页数据抓取和任务自动化等场景。

Selenium 为各种编程语言提供了 API,用作测试。 目前的官方 API 文档有 C#、JavaScript、Java、Python、Ruby。


安装 Selenium 和 WebDriver

安装 Selenium

要开始使用 Selenium,首先需要安装 selenium 库,并下载适用于你浏览器的 WebDriver。

使用 pip 安装 Selenium:

pip install selenium

安装完成后,可以使用以下命令查看 selenium 的版本信息:

pip show selenium

也可以使用 Python 代码查看:

import selenium
print(selenium.__version__)

下载WebDriver

Selenium 需要一个 WebDriver 来与浏览器进行交互。

不同的浏览器需要不同的 WebDriver,例如 Chrome 浏览器需要 ChromeDriver,你需要根据你使用的浏览器下载相应的 WebDriver,并确保它在你的系统 PATH 中。

  • Chrome: ChromeDriver
  • Firefox: GeckoDriver
  • Edge: EdgeDriver
  • Safari: SafariDriver

选择浏览器并初始化 WebDriver:

实例

from selenium import webdriver

# 使用 Chrome 浏览器
driver = webdriver.Chrome(executable_path=‘/path/to/chromedriver’)

# 或者使用 Firefox 浏览器
# driver = webdriver.Firefox(executable_path=‘/path/to/geckodriver’)

# 或者使用 Edge 浏览器
# driver = webdriver.Edge(executable_path=‘/path/to/msedgedriver’)

从 Selenium 4 开始,在浏览器驱动的管理方式上发生了变化:Selenium 4 尝试自动检测系统中安装的浏览器版本,并下载相应的驱动程序,这意味着用户不再需要手动下载和设置驱动程序路径,除非他们需要特定版本的驱动程序。

实例

from selenium import webdriver

driver = webdriver.Chrome() # 如果使用其他浏览器,如 Firefox,需要相应修改

当国内的网络环境,自动检测下载驱动需要不一样的网络环境,所以建议手动下载驱动,然后指定驱动路径。

在 Selenium 4 中,不再直接在 webdriver.Chrome 中设置驱动程序路径,而是通过引入 Service 对象来设置。这样可以避免弃用警告,并确保驱动程序的正确加载。例如:

实例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

service = ChromeService(executable_path=“PATH_TO_DRIVER”)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

以下代码指定驱动文件路径来获取网页标题:

实例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

# 设置正确的驱动路径
service = ChromeService(executable_path=“/RUNOOB/Downloads/chromedriver-mac-arm64/chromedriver”)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

# 打开一个网站
driver.get(“https://cn.bing.com”)

# 获取页面标题
print(driver.title)

# 关闭浏览器
driver.quit()


基本用法

初始化 WebDriver

选择浏览器并初始化 WebDriver:

实例

from selenium import webdriver

# 使用 Chrome 浏览器
driver = webdriver.Chrome()

# 或者使用 Firefox 浏览器
# driver = webdriver.Firefox()

# 或者使用 Edge 浏览器
# driver = webdriver.Edge()

打开网页

使用 get() 方法打开网页:

driver.get("https://www.baidu.com")

查找页面元素

可以通过多种方式查找页面元素,例如使用 ID、类名、标签名等:

实例

# 通过 ID 查找元素
search_box = driver.find_element(“id”, “kw”)

# 通过类名查找元素
search_button = driver.find_element(“class name”, “s_ipt”)

# 通过标签名查找元素
links = driver.find_elements(“tag name”, “a”)

模拟用户操作

Selenium 可以模拟用户在浏览器中的操作,例如点击、输入文本等:

实例

# 在搜索框中输入文本
search_box.send_keys(“Selenium Python”)

# 点击搜索按钮
search_button.click()

获取元素属性和文本

可以获取页面元素的属性值或文本内容:

实例

# 获取元素的文本
element_text = search_box.text

# 获取元素的属性值
element_attribute = search_box.get_attribute(“placeholder”)

等待

有时页面加载需要时间,可以使用显式等待或隐式等待来确保元素可操作:

实例

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 显式等待
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, “kw”))
)

# 隐式等待
driver.implicitly_wait(10)

关闭浏览器

操作完成后,记得关闭浏览器:

driver.quit()

简单的网页自动化

下面是一个简单的 Selenium 项目示例,用于自动化搜索关键词,并获取结果页面的标题。

实例

from selenium import webdriver
from selenium.webdriver.common.by import By # 导入 By 模块
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置驱动的路径,启动浏览器
service = ChromeService(executable_path=“/RUNOOB/Downloads/chromedriver-mac-arm64/chromedriver”)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

try:
# 打开百度首页
driver.get(“https://www.baidu.com”)

\# 查找搜索框元素  
search\_box \= driver.find\_element(By.ID, "kw")\# 输入搜索内容  
search\_box.send\_keys("Selenium Python")\# 提交搜索表单  
search\_box.send\_keys(Keys.RETURN)\# 等待搜索结果加载  
WebDriverWait(driver, 10).until(  EC.presence\_of\_element\_located((By.ID, "content\_left"))  
)\# 打印页面标题  
print("页面标题是:", driver.title)

finally:
# 关闭浏览器
driver.quit()


selenium 常用方法

下表列出了 selenium 库的常用方法:

方法说明示例代码
webdriver.Chrome()初始化 Chrome 浏览器实例。driver = webdriver.Chrome()
driver.get(url)访问指定的 URL 地址。driver.get("https://example.com")
driver.find_element(By, value)查找第一个匹配的元素。element = driver.find_element(By.ID, "id")
driver.find_elements(By, value)查找所有匹配的元素。elements = driver.find_elements(By.CLASS_NAME, "class")
element.click()点击元素。element.click()
element.send_keys(value)向输入框中发送键盘输入。element.send_keys("text")
element.text获取元素的文本内容。text = element.text
driver.back()浏览器后退。driver.back()
driver.forward()浏览器前进。driver.forward()
driver.refresh()刷新当前页面。driver.refresh()
driver.execute_script(script, *args)执行 JavaScript 脚本。driver.execute_script("alert('Hello!')")
driver.switch_to.frame(frame_reference)切换到指定的 iframe。driver.switch_to.frame("frame_id")
driver.switch_to.default_content()切换回主文档。driver.switch_to.default_content()
driver.quit()关闭浏览器并退出驱动。driver.quit()
driver.close()关闭当前窗口。driver.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vllm部署LLM(qwen2.5,llama,deepseek)

目录 环境 qwen2.5-1.5b-instruct 模型下载 vllm 安装 验证安装 vllm 启动 查看当前模型列表 OpenAI Completions API(文本生成) OpenAI Chat Completions API(chat 对话) vllm 进程查看,kill llama3 deep…

Python NumPy库使用指南:从入门到精通

1. 引言 NumPy(Numerical Python)是 Python 中用于科学计算的核心库之一。它提供了强大的多维数组对象(ndarray),以及一系列高效的数学函数,能够轻松处理大规模的数值数据。NumPy 是许多其他科学计算库(如 Pandas、Matplotlib、Scikit-learn 等)的基础。 本文将详细介…

15.2 智能销售顾问系统技术架构解密:构建企业级知识驱动型对话引擎

智能销售顾问系统技术架构解密:构建企业级知识驱动型对话引擎 关键词:RAG 架构设计、销售知识库系统、LoRA 微调优化、多模态交互引擎、高并发服务部署 1. 系统技术架构全景解析 1.1 核心架构设计图 #mermaid-svg-UBkTgaR5lf5WfGMa {font-family:"trebuchet ms",…

用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解

DeepSeek R1 的完整训练流程核心在于,在其基础模型 DeepSeek V3 之上,运用了多种强化学习策略。 本文将从一个可本地运行的基础模型起步,并参照其技术报告,完全从零开始构建 DeepSeek R1,理论结合实践,逐步…

爬虫基础入门之爬取豆瓣电影Top250-Re正则的使用

网址:豆瓣电影 Top 250 本案例所需要的模块 requests (用于发送HTTP请求)re (用于字符串匹配和操作) 确定需要爬取的数据 : 电影的名称电影的年份电影的评分电影评论人数 一. 发送请求 模拟浏览器向服务器发送请求 准备工作 -分析页面: F12 or 右击点击检查 查看…

力扣hot100——岛屿数量 岛屿问题经典dfs总结

给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边…

FPGA DSP:Vivado 中带有 DDS 的 FIR 滤波器

本文使用 DDS 生成三个信号,并在 Vivado 中实现低通滤波器。低通滤波器将滤除相关信号。 介绍 用DDS生成三个信号,并在Vivado中实现低通滤波器。低通滤波器将滤除较快的信号。 本文分为几个主要部分: 信号生成:展示如何使用DDS&am…

MessageAuthenticator

MessageAuthenticator https://coova.github.io/JRadius/ https://coova.github.io/JRadius/ import org.tinyradius.packet.RadiusPacket; import org.tinyradius.util.RadiusUtil; import java.nio.charset.StandardCharsets;public class RadiusAuthUtils {/*** 生成 RADI…

Spring Boot嵌入式服务器深度解析:从配置到调优的全方位指南

文章目录 引言一、嵌入式服务器核心原理1.1 架构设计特点1.2 主流服务器对比 二、嵌入式服务器配置实战2.1 基础配置模板2.2 HTTPS安全配置 三、高级调优策略3.1 线程池优化(Tomcat示例)3.2 响应压缩配置3.3 访问日志配置 四、服务器切换实战4.1 切换至U…

基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志

一、修改所有节点主机名 主节点就修改成master hostnamectl set-hostname master 然后输入bash刷新当前主机名 工作节点1就修改成node1 hostnamectl set-hostname node1 然后输入bash刷新当前主机名 二、全部节点安装依赖并同步时间 yum -y install socat conntrack ebta…

探索与Cursor协作创建一个完整的前后端分离的项目的最佳实践

探索与Cursor协作创建一个完整的前后端分离的项目的最佳实践 Cursor简介 Cursor在目前代表了AI编程技术的顶峰。在一定程度上可以说是当今AI时代的最强生产力代表。为此,不惜重金开了年费会员来紧跟时代步伐。当然cline、roo code、trae等开源或者免费产品也在紧追不舍。 C…

支持向量机(SVM)在 NLP 中的使用场景

支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,广泛应用于分类任务中。由于其出色的分类性能和高效的计算特点,SVM 已经成为自然语言处理(NLP)领域中的一种经典模型。SVM 在 NLP 中的应用非常广泛,尤其在文本分类任务中,表现出色。 本文将探讨 SV…

nodejs:vue 3 + vite 作为前端,将 html 填入<iframe>,在线查询英汉词典

向 doubao.com/chat/ 提问: node.js js-mdict 作为后端,vue 3 vite 作为前端,编写在线查询英汉词典 后端部分(express js-mdict ) 详见上一篇:nodejs:express js-mdict 作为后端&#xff…

Jenkins 部署在 Mac 并在局域网内通过 ip 访问

Jenkins 部署在 Mac 并在局域网内通过 ip 访问 一、修改配置文件 打开文件 ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist 打开文件 /usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist 两个文件目录不同&#xff0c;内容一样 <?xml version"1.0" e…

2通道12bit 10G USB高速示波器采集卡

概述 USB高速示波器采集卡 2通道&#xff0c;12位&#xff0c;10GSa/s 采样率 DC~2.5GHz 带宽 USB高速示波器采集卡是一款高速12bit多通道USB数字化仪它具有2通道10GSa/s采样率&#xff0c;模拟前端带宽从DC到2.5GHz&#xff0c;板载32GB DDR4存储&#xff0c;使其能够满足长…

Python|OpenCV-实现人物眨眼检测(21)

前言 本文是该专栏的第23篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 通过OpenCV库来实现人物的眨眼检测,首先是需要了解眨眼检测的基本原理。一般来说,是需要通过检测眼睛的状态,比如眼睛是否闭合来判断是否眨眼。对此,如果基于OpenCV,通过Python如何去实…

Qt | Excel创建、打开、读写、另存和关闭

01 如何在Qt中使用QXlsx库进行Excel文件的读写操作,包括创建新Excel、写入数据、读取数据以及文件保存和释放资源。通过实例展示了如何加载库、编写.h和.cpp文件,并演示了使用单元格引用和行列号进行数据操作的方法。 QXlsx是一个可以读写Excel文件的库。不依赖office以及…

AMBA-CHI协议详解(十九)

文章目录 4.6 Silent cache state transitions4.7 Cache state transitions at a Requester4.7.1 Read request transactions4.7.2 Dataless request transactions4.7.3 Write request transactions4.7.4 Atomic transactions4.7.5 Other request transactions4.6 Silent cache…

常见的“锁”有哪些?

悲观锁 悲观锁认为在并发环境中&#xff0c;数据随时可能被其他线程修改&#xff0c;因此在访问数据之前会先加锁&#xff0c;以防止其他线程对数据进行修改。常见的悲观锁实现有&#xff1a; 1.互斥锁 原理&#xff1a;互斥锁是一种最基本的锁类型&#xff0c;同一时间只允…

深入理解 Python 作用域:从基础到高级应用

在 Python 编程中&#xff0c;作用域是一个至关重要的概念&#xff0c;它决定了变量和函数的可见性与生命周期。正确理解和运用作用域规则&#xff0c;对于编写结构清晰、易于维护的代码起着关键作用。无论是简单的脚本还是复杂的大型项目&#xff0c;作用域都贯穿其中&#xf…