网站首页 > 技术文章 正文
Selenium是一个用来对Web应用程序进行测试的自动化测试工具,能够模拟出用户在浏览器中的各种行为,通过自动化的操作来执行任务,例如说可以模拟用户点击按钮、填写表单、抓取网页内容等,虽然是一个自动化测试工具,但是被很多开发者用来构建网络爬虫,尤其是在一些使用了动态技术进行交互的页面中,这个工具的效果非常好的。可以与多种浏览器兼容,支持了各种的编程语言。
下面我们以谷歌浏览器为例来演示如何使用Selenium
安装Selenium
想要使用Selenium,就必须要先安装Selenium,如下所示。
pip install selenium
此外,Selenium还需要WebDriver来控制浏览器的行为,一般的比较常用的WebDriver有ChromeDriver、GeckoDriver(Firefox)等,这里以ChromeDriver为例,可以在下面的这个连接中获取。
https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.264/win64/chromedriver-win64.zip
设置WebDriver
Selenium的工作原理是通过WebDriver来控制浏览器行为,来模拟一些用户操作,如下所示。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 设置ChromeDriver路径
chrome_driver_path = 'H:/python-mini-script-warehouse/Selenium/chromedriver-win64/chromedriver.exe'
# 创建Service对象,并传入ChromeDriver路径
service = Service(chrome_driver_path)
# 使用WebDriver启动浏览器
driver = webdriver.Chrome(service=service)
# 访问网站
driver.get('https://www.baidu.com')
# 执行其他操作
driver.quit()
加载网页并获取网页内容
接下来我们就来通过Selenium来加载网页并且模拟用户操作,如下所示,我们可以通过driver.get()方法加载一个页面,之后可以通过不同的方法获取网页内容。
# 获取网页标题
title = driver.title
print(title)
# 获取网页源代码
html_source = driver.page_source
print(html_source)
在Selenium中还提供了很多的方法来获取网页上的元素,如下所示。
查找单个元素
element = driver.find_element_by_id('element_id') # 通过ID查找
# 获取元素的文本内容
print(element.text)
# 通过类名查找
element = driver.find_element_by_class_name('class_name')
查找多个元素
elements = driver.find_elements_by_class_name('class_name')
for element in elements:
print(element.text)
当然还有一些其他的查询操作,如下所示。
- find_element_by_name()
- find_element_by_xpath()
- find_element_by_css_selector()
从名称上也可以看出了分别是通过名称查找、通过xpath查找、通过Class选择器查找。
处理动态内容
在上面的介绍中我们提到过Selenium的优势就在于对于JavaScript动态渲染的内容的处理,下面我们就来详细介绍一下。
显式等待
可以通过WebDriverWait来显式等待某个元素加载完成,如下所示。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待某个元素出现(如,等待id为"element_id"的元素可见)
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "element_id"))
)
print(element.text)
滚动页面
在很多页面操作中,内容是需要滚动页面才能进行加载的,这个时候,我们就可以通过JavaScript来执行滚动操作。
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
模拟交互
通过Selenium我们也可以模拟出一些用户的交互行为,例如点击按钮,输入表单等,如下所示。
# 输入框输入文本
input_box = driver.find_element_by_name('q')
input_box.send_keys('Python Selenium')
# 点击按钮
submit_button = driver.find_element_by_name('btnK')
submit_button.click()
关闭浏览器
在模拟操作完成之后,我们可以通过如下的操作来关闭浏览器。
driver.quit()
完整的百度搜索实现
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
import time
# 设置ChromeDriver路径
chrome_driver_path = './Selenium/chromedriver-win64/chromedriver.exe'
# 创建Service对象,并传入ChromeDriver路径
service = Service(chrome_driver_path)
# 使用WebDriver启动浏览器
driver = webdriver.Chrome(service=service)
# 访问网站
driver.get('https://www.baidu.com')
input_box = driver.find_element(By.ID,"kw")
input_box.send_keys('Python')
# 提交搜索(模拟按下回车键)
input_box.send_keys(Keys.RETURN)
# 等待搜索结果加载
time.sleep(2)
# 获取搜索结果并打印
results = driver.find_elements(By.CSS_SELECTOR, '.result.c-container')
for index, result in enumerate(results[:5], start=1): # 获取前5个结果
title = result.find_element(By.CSS_SELECTOR, 'h3').text
link = result.find_element(By.CSS_SELECTOR, 'a').get_attribute('href')
print(f'{index}. Title: {title}, Link: {link}')
# 关闭浏览器
driver.quit()
总结
Selenium是一个功能强大的浏览器自动化工具,尤其适用于处理动态内容或需要与页面进行交互的场景。尽管它比传统的requests和BeautifulSoup等爬虫库要慢一些,但它能够更好地模拟用户行为,适用于复杂的网页爬取任务。
猜你喜欢
- 2025-03-11 Python开发的自动上传采集工具,轻松采集网站数据
- 2025-03-11 一篇文章教会你使用Python定时抓取微博评论
- 2025-03-11 Python性能监控实战,掌握性能指标采集
- 2025-03-11 Scrapy爬虫框架 批量抓取数据轻轻松松啦~
- 2025-03-11 自动化测试实战篇:基于Python实践性能指标结果自动采集工具
- 2025-03-11 从0教你用Python写网络爬虫,内容详细代码清晰,适合入门学习
- 2025-03-11 突破某易云的JS逆向,利用Python采集整站数据
- 2025-03-11 我背着女朋友,用 Python 偷偷抓取了她的行踪
- 2025-03-11 免Python也能网页抓取:用AI自动完成 HTML 解析和数据提取
- 2025-03-11 Python数据采集实战-使用BeautifulSoup解析HTML文档提取所需内容
- 265℃Python短文,Python中的嵌套条件语句(六)
- 264℃python笔记:for循环嵌套。end=""的作用,图形打印
- 263℃PythonNet:实现Python与.Net代码相互调用!
- 259℃Python实现字符串小写转大写并写入文件
- 257℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 117℃原来2025是完美的平方年,一起探索六种平方的算吧
- 98℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 90℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
-
- 想要提升Python代码效率?这五个高级方法是必须要会的
- 函数还能返回函数?Python 这个神操作让代码效率翻倍
- 新手学Python避坑,学习效率狂飙! 二十一、print()函数
- 新手学Python避坑,学习效率狂飙!十九、break 与 continue
- 新手学Python避坑,学习效率狂飙!十三、if语句和while语句
- Python自动化办公:打工人常用的10个效率工具,告别加班!
- Python的10个神级冷门技巧,让代码效率翻倍!
- 提升Python编程效率的10点建议(python小技巧及速度提高)
- 90%的Python程序员都不知道的(效率密码 )函数让代码直接封神!
- 【Python】性能加速之解析器加速Pypy 库使用说明
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)