Python Selenium 的基本使用方法-程序员宅基地

技术标签: 网络爬虫  爬虫  python  selenium  Python相关  开发语言  


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*.deb

sudo 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 Service

WEB_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 可以帮助我们在执行自动化脚本时更加稳定可靠,确保在进行操作之前目标元素已经准备好。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36803941/article/details/137465580

智能推荐

zookeeper没有对节点设置删除权限,如何删除节点_zookeeper deleteall 没权限-程序员宅基地

文章浏览阅读2.6k次。设置超级管理员 当对节点设置权限时,没有设置删除权限,那么如果想删除该节点,只能通过超级管理员来删除。 运行代码: String s = DigestAuthenticationProvider.generateDigest("super:admin"); System.out.println(s); 将打印出来的s 放到: "-Dzookeeper.Diges..._zookeeper deleteall 没权限

build constraints exclude all Go files in D:\code\go\pkg\mod\github.com\goccy\[email protected]\int_build constraints exclude all go files in c:\progr-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏2次。原因目录中存在大量c文件,因为没有开启CGO机制,所以编译失败,导致出错。解决方案在保证本地有c编译器可用时,执行下面语句开启CGO机制。go env -w CGO_ENABLED=1_build constraints exclude all go files in c:\program files\go\pkg\mod\github

JS new Date() 时区问题_js new date() timezone设置波兰-程序员宅基地

文章浏览阅读1.9k次,点赞6次,收藏8次。js new Date()时区问题_js new date() timezone设置波兰

AMR_WB Codec(一)-程序员宅基地

文章浏览阅读97次。把AMR_NB 在 ARMv4, ARMv5 和ARMv7指令集优化做了一遍,现在开始做AMR_WB codec在ARMv4和ARMv5指令优化,等这个做好后,争取来一个CELP编码相关算法全集深度剖析,也好自己将学习总结一下。先把AMR_WB codec相关知识介绍一下。 AMR-WB是由3GPP/ETSI在2001年制定用于WCDMA和GSM的宽带语音编码标准,ITU-..._codec awr-nb

mybatis与spring集成中SqlSessionFactory创建流程-程序员宅基地

文章浏览阅读2.9k次。Mybatis作为优秀且广泛使用的轻量级持久层框架经常与Spring集成一起使用,集成过程中sqlSessionFactory的创建流程是什么样的呢?本文结合mybatis、mybatis-spring源码以及UML时序图的方式阐述如何进行:以下为Mybatis与Spring集成的部分配置,主要是涉及SqlSessionFactory bean:_创建类路径资源[spring mybatis.xml]中定义的名称为“sqlsessionfactory”的bean

TimeGen 软件的使用_timegen 字体太小-程序员宅基地

文章浏览阅读1.1k次。官网 http://www.xfusionsoftware.com/timegen 是一款实用的画时序图工具,软件提供了直观的用户界面和丰富实用的绘图工具,可以帮助用户轻松绘制各种序列图、顺序图、循序图等,同时timegen还拥有实用的快捷键操作功能,能够让你绘图时序图更加轻松,且可以自由设置各个文本框的属性字体样式、字体 大小和颜色等。下面简单介绍一下他的应用:主要参考:https://blog.csdn.net/qq_25144391/article/details/104423988?ops__timegen 字体太小

随便推点

spacemacs快速入门-程序员宅基地

文章浏览阅读1.7w次。翻译自github上spacemacs项目的quick start文件_spacemacs

【转载】Keras.layers.Conv2D参数详解 搭建图片分类 CNN (卷积神经网络)-程序员宅基地

文章浏览阅读6.9k次,点赞14次,收藏85次。filters:卷积核(就是过滤器)的数目(即输出的维度)kernel_size:单个整数或由两个整数构成的list/tuple,卷积核(过滤器)的宽度和长度。(kernel n.核心,要点,[计]内核)如为单个整数,则表示在各个空间维度的相同长度。strides:单个整数或由两个整数构成的list/tuple,为卷积的步长。如为单个整数,则表示在各个空间维度的相同步长。任何不为1的strides均与任何不为1的dilation_rata均不兼容。padding:补0策略,为"valid", ._layers.conv2d

USB3.0:VL817Q7-C0的LAYOUT指南(三)_usb3.0 layout-程序员宅基地

文章浏览阅读1.5k次。本文着重讲解市面上常见的USB3.0集线器驱动芯片威盛VL817-Q7C0的layout布局处理以及注意事项。可分为三小节。 前文已经讲过VL系列的第一小节:《线路布局重点说明》以及第二小节《PCB布局检查》。本文着重讲解第三小节:《VL芯片布局的注意事项》。VLI芯片布局注意事项1.高速对线的阻抗:(包括线宽,线距,SMD&DIP PAN的处理)二层板/板厚1.6mm......_usb3.0 layout

有没有遇到过Anaconda中Spyder无法更新到4.0.1的问题?_spyderutility4.0升级-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏13次。在anaconda的使用过程中,时不时会遇到类似Spyder等无法更新的问题,这种问题即使通过重新安装Anaconda也无法解决。这里直接放上我成功解决Spyder更新的方法链接:Trouble updating to Spyder 4.0.0.通常,我们可以通过命令 conda update spyder获取最新版本,然而,即使是在刚安装好anaconda后,也会提示当前版本是3.3.6。无..._spyderutility4.0升级

分治算法思想及应用_分治思想-程序员宅基地

文章浏览阅读3.8k次,点赞5次,收藏22次。一. 分治算法介绍1. 分治算法思想2. 分治算法适用条件3. 分治算法的引入二. 分治算法的应用1. 快速排序2. 快排划分函数求topk问题3. 归并排序4. 合并k个有序单链表5. 对数时间求中位数算法思想_分治思想

Linux|minio对象存储服务的部署和初步使用总结_linux部署minio-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏5次。minio是一个非常轻量化的对象存储服务,是可以算到云原生领域的。该服务是使用go语言编写的,因此,主文件就一个文件,它的下载,部署什么的都是非常简单的,一般两三步就可以搭建好了,只是有一些细节问题需要在部署使用的时候注意。本文将就一个可用的minio存储服务部署做一个尽量详细的讲解,并探讨如何将该技术落地_linux部署minio

推荐文章

热门文章

相关标签