Python Selenium 的基本使用方法

文章目录

  • 1. 概述
  • 2. 安装Chrome及ChromeDriver
    • 2.1 安装Chrome
    • 2.2 安装ChromeDriver
  • 3. 安装Selenium
  • 4. 常见用法
    • 4.1 启动
    • 4.2 查找元素
    • 4.3 等待页面加载元素


1. 概述

Selenium 是一个用于自动化 web 浏览器的工具,它提供了一套用于测试 web 应用程序的工具和库。Selenium 最初是用于测试 web 应用程序的,但它也被广泛用于进行网络数据采集、自动化任务和网页操作等。

Selenium 支持多种编程语言,包括 Python、Java、JavaScript、C# 等,但最为常用的是使用 Python 进行 Selenium 测试和自动化。使用 Selenium,您可以编写代码来模拟用户在 web 浏览器中的操作,例如打开网页、填写表单、点击按钮、提取网页内容等。

Selenium 提供了多个工具和库,其中最常用的是 Selenium WebDriver,它允许您控制各种不同的 web 浏览器,如 Chrome、Firefox、Edge 等。通过 Selenium WebDriver,您可以编写代码来与浏览器进行交互,模拟用户在浏览器中的行为,并对 web 应用程序进行测试、数据采集和自动化任务。

2. 安装Chrome及ChromeDriver

2.1 安装Chrome

(1)linux 安装 Chrome 方法:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb# 如果这一步报错,直接执行下一步
sudo dpkg -i ./google-chrome*.debsudo apt-get install -f

判断是否安装成功

google-chrome --version

(2)Windows 和 Mac,安装Chrome 浏览器即可

2.2 安装ChromeDriver

ChromeDriver 的下载方式参考这里,注意 ChromeDriver 和 Chrome 内核的版本匹配即可。

3. 安装Selenium

pip install selenium

4. 常见用法

4.1 启动

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import ServiceWEB_DRIVER_PATH = "/xxx/xx/chromedriver"
chrome_options = Options()
driver = webdriver.Chrome(service=Service(WEB_DRIVER_PATH), options=chrome_options)

以下是启动一些常见应用场景的 ChromeOptions 配置示例:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options# 创建ChromeOptions实例
chrome_options = Options()# 1. 隐身模式启动
chrome_options.add_argument("--incognito")# 2. 大窗口启动
chrome_options.add_argument("--start-maximized")# 3. 禁用GPU渲染
chrome_options.add_argument('--disable-gpu')# 4. 添加浏览器启动参数,例如禁用安全警告
chrome_options.add_argument('--unsafely-treat-insecure-origin-as-secure="http://example.com"')
chrome_options.add_argument('--ignore-certificate-errors')# 5. 添加扩展程序
# 注意:extension_path应指向本地的.crx扩展程序文件
extension_path = '/path/to/your/extension.crx'
chrome_options.add_extension(extension_path)# 6. 更改下载目录
prefs = {"download.default_directory": "/path/to/download/folder","download.prompt_for_download": False,"plugins.always_open_pdf_externally": True  # 例如,总是外部打开PDF文件
}
chrome_options.add_experimental_option("prefs", prefs)# 7. 启动无头模式(无界面运行)
chrome_options.add_argument('--headless')# 创建Chrome浏览器实例,使用上述配置
driver = webdriver.Chrome(options=chrome_options)# 执行网页导航或者其他操作...
driver.get('http://example.com')# 使用完毕后关闭浏览器
driver.quit()

4.2 查找元素

(1)用 id 查找

from selenium.webdriver.common.by import By
try:ele = driver.find_element(By.ID, "id name")
except Exception as e:pass

(2)用 class 查找

from selenium.webdriver.common.by import By
try:# 查找第一个class名字匹配的元素ele = driver.find_element(By.CLASS_NAME, "class name")  # 替换 "class_name" 为实际Class名# 查找所有class名字匹配的元素eles = driver.find_elements(By.CLASS_NAME, "class name")
except Exception as e:pass

(3)用 css 查找

from selenium.webdriver.common.by import By
try:# 通过CSS选择器定位单个元素element = driver.find_element(By.CSS_SELECTOR, "#element_id" or ".class_name" or "tag_name[attr=value]"...)  # 使用实际的CSS选择器# 通过CSS选择器定位一组元素elements = driver.find_elements(By.CSS_SELECTOR, "your_css_selector")
except Exception as e:pass

(4)查找其他元素

from selenium.webdriver.common.by import By
try:# 查找所有div标签ele = driver.find_elements(By.TAG_NAME, "div")# 查找第一个a标签ele = driver.find_element(By.TAG_NAME, "a")# 查找第一个span标签ele = driver.find_element(By.TAG_NAME, "span")
except Exception as e:pass

4.3 等待页面加载元素

有时页面加载需要等待一定时间,如果显式的 sleep,不够灵活,可以借助selenium 的 WebDriverWait。

WebDriverWait 是 Selenium WebDriver 中用于实现隐式等待和显式等待的一种机制,它能够根据提供的条件等待元素变为可用或满足特定条件。显式等待允许你在执行下一步操作之前强制等待某个条件成立,这样可以避免因为页面元素加载不完全而导致的找不到元素或操作元素失败的问题。

使用 WebDriverWait 的基本步骤如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 初始化WebDriver对象,这里以Chrome为例
driver = webdriver.Chrome()# 访问某个URL
driver.get("http://www.example.com")# 创建WebDriverWait对象,通常需要传入WebDriver实例和超时时长
wait = WebDriverWait(driver, 10)  # 这里的10表示最长等待10秒# 使用WebDriverWait等待某个条件满足
# 例如,等待页面上某个id为'element_id'的元素可见
element = wait.until(EC.presence_of_element_located((By.ID, 'element_id')))# 此时,element变量已经被赋值为找到的元素,可以对其进行后续操作
element.click()# 或者等待页面标题包含特定文字
wait.until(EC.title_contains("Example"))# 最后,关闭浏览器
driver.quit()

expected_conditions模块提供了多种内置条件:

  • presence_of_element_located((By.ID, 'element_id')):等待元素存在
  • visibility_of_element_located((By.ID, 'element_id')):等待元素可见
  • element_to_be_clickable((By.ID, 'element_id')):等待元素可见且可点击
  • title_is("Page Title"):等待页面标题为特定值
  • title_contains("Partial Title"):等待页面标题包含特定部分

通过这种方式,WebDriverWait 可以帮助我们在执行自动化脚本时更加稳定可靠,确保在进行操作之前目标元素已经准备好。

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

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

相关文章

备考2024年小学生古诗文大会:吃透历年真题和知识点(持续讲题)

对上海小学生的小升初和各种评优争章来说,语文、数学、英语的含金量较高的证书还是很有价值和帮助的。对于语文类的竞赛,小学生古诗文大会和汉字小达人通常是必不可少的,因为这两个针对性强,而且具有很强的上海本地特色。 根据往…

【nnUNetv2进阶】六、nnUNetv2 魔改网络-小试牛刀-加入注意力机制CBAM

nnUNet是一个自适应的深度学习框架,专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点: 自适应框架:nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等,从而避免了繁琐的手工调参过程。 自动化流程&a…

Shopee虾皮批量上传全球产品指南

当shopee虾皮需要大量上架新产品时,批量工具可以更好的提升效率。通过本指南,你将了解如何批量上传全球商品,本指南适用于所有站点。 一、什么是批量上传? 您可以通过【中国卖家中心>>全球商品>>批量上传】功能&…

一文教您理解Playwright是如何实现动态等待的

使用过Playwright的同学都会有这样的感受,Playwright对UI页面中元素的识别非常稳定,这离不开其强大的动态等待机制!简单的解释就是,Playwright在对UI页面中的任何元素操作之前,都需要做出一些列的校验工作来确保能够稳…

GaussDB数据库SQL系列-聚合函数

背景 在这篇文章中,我们将深入探讨GaussDB数据库中聚合函数的使用和优化。聚合函数是数据库查询中非常重要的工具,它们可以对一组值执行计算并返回单个值。例如,聚合函数可以用来计算平均值、总和、最大值和最小值。 这些功能在数据分析和报…

【Linux】网络与守护进程

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:进程状态、类型、优先级、命令行参数概念、环境变量(重要)、程序地址空间 目录 👉🏻守护…

面试八股——集合——List

主要问题 数组 如果数组索引从0开始时,数组的寻址方式为: 如果数组索引从1开始时,数组的寻址方式为: 此时对于CPU来说增加了一个减法指令,降低寻址效率。 ArrayList⭐ ArrayList构造函数 尤其说一下第三个构造函数流…

【复习笔记】FreeRTOS(五)时间片调度

本文是FreeRTOS复习笔记的第五节,时间片调度。 上一篇文章: 【复习笔记】reeRTOS(四) 列表项的插入和删除 文章目录 1.时间片调度简介1.1. 运行过程 二、实验设计三、测试例程四、实验效果 1.时间片调度简介 FreeRTOS支持多个任务同时拥有一个优先级&am…

设计千万级并发系统架构需要考虑的各方面因素

设计千万级并发系统架构需要考虑多方面因素,包括系统的可伸缩性、高可用性、性能、安全性等。 1、分布式架构: 使用微服务架构:将系统拆分成多个独立的服务,每个服务都可以独立部署和扩展。 使用分布式服务框架:如S…

顺丰同城急送API的坑(附源码)

一、背景 最近公司让我对接顺丰同城急送的API,讲讲里面我遇到的坑 官方的API文档给我的感觉是不怎么规范的,很多细节要靠猜,示例代码也不全,具体细节不多说,如果你现在也需要对接他们API,可以参考本篇博客…

爬虫 | 基于 requests 实现加密 POST 请求发送与身份验证

Hi,大家好,我是半亩花海。本项目旨在实现一个简单的 Python 脚本,用于向指定的 URL 发送 POST 请求,并通过特定的加密算法生成请求头中的签名信息。这个脚本的背后是与某个特定的网络服务交互,发送特定格式的 JSON 数据…

LeetCode in Python 1338. Reduce Array Size to The Half (数组大小减半)

数组大小减半思路简单,主要是熟悉python中collections.Counter的用法,采用贪心策略即可。 示例: 图1 数组大小减半输入输出示例 代码: class Solution:def minSetSize(self, arr):count Counter(arr)n, ans 0, 0for i, valu…

北大字节联合发布视觉自动回归建模(VAR):通过下一代预测生成可扩展的图像

北大和字节发布一个新的图像生成框架VAR。首次使GPT风格的AR模型在图像生成上超越了Diffusion transformer。 同时展现出了与大语言模型观察到的类似Scaling laws的规律。在ImageNet 256x256基准上,VAR将FID从18.65大幅提升到1.80,IS从80.4提升到356.4,推理速度提高了20倍。 相…

关于Jetson空间不足的解决问题(sd卡挂载和conda更改环境安装路径)

文章目录 问题描述挂载sd卡到指定目录查看conda路径更改环境路径指定路径安装conda虚拟环境 问题描述 因为在做毕设的时候,用到了Jetson,发现这个空间太小了,如果下conda的包根本不够用,所以就想挂载sd卡,然后把环境安…

国外GIS软件排名简介<30个>

简介 国外gisgeography网站进行了一次GIS软件排名,通过分析、制图、编辑等因素进行测试,具体规则如下: 分析:矢量/栅格工具、时态、地统计、网络分析和脚本。 制图:地图类型、坐标系、地图布局/元素、标注/注记、3D …

C#到底属于编译型语言还是解释型语言?

C#是一种编译型语言,也称为静态类型语言,这意味着C#代码在运行之前需要经过编译器的编译处理,并生成一个可执行的本地代码文件(通常是.exe或.dll文件)。相反,解释型语言将代码转换为低级代码后直接执行&…

计算机视觉——手机目标检测数据集

这是一个手机目标检测的数据集,数据集的标注工具是labelimg,数据格式是voc格式,要训练yolo模型的话,可以使用脚本改成txt格式,数据集标注了手机,标签名:telephone,数据集总共有1960张,有一部分是…

软件无线电安全之GNU Radio基础 -上

GNU Radio介绍 GNU Radio是一款开源的软件工具集,专注于软件定义无线电(SDR)系统的设计和实现。该工具集支持多种SDR硬件平台,包括USRP、HackRF One和RTL-SDR等。用户可以通过GNU Radio Companion构建流程图,使用不同…

BackTrader 中文文档(二十七)

原文:www.backtrader.com/ 数据 - 多个时间框架 原文:www.backtrader.com/blog/posts/2015-08-24-data-multitimeframe/data-multitimeframe/ 有时,使用不同的时间框架进行投资决策: 周线用于评估趋势 每日执行进入 或者 5 分钟…

软考132-上午题-【软件工程】-沟通路径

一、定义 1-1、沟通路径1 沟通路径 1-2、沟通路径2 沟通路径 n-1 二、真题 真题1: 真题2: 真题3: