Selenium 使用指南:从入门到精通

Selenium 使用指南:从入门到精通

Selenium 是一个用于自动化 Web 浏览器操作的强大工具,广泛应用于自动化测试和 Web 数据爬取中。本文将带你从入门到精通地掌握 Selenium,涵盖其基本操作、常用用法以及一个完整的图片爬取示例。

1. 环境配置

1.1 安装 Selenium

在 Python 环境中,可以通过 pip 安装 Selenium:

bash 复制代码
pip install selenium

1.2 下载 WebDriver

Selenium 需要与特定浏览器的 WebDriver 一起使用。例如,若使用 Chrome 浏览器,需要下载 ChromeDriver 并确保路径已配置好。

1.3 设置 WebDriver 路径

将下载的 WebDriver 解压后,路径可以设置到系统环境变量中,或在代码中指定其位置。

2. Selenium 基本用法

2.1 启动浏览器并打开页面

python 复制代码
from selenium import webdriver

# 创建 Chrome 浏览器实例并指定 WebDriver 路径
driver = webdriver.Chrome(executable_path=r'C:\Program Files\Google\Chrome\Application\chromedriver.exe')

# 打开网页
driver.get('https://www.example.com')

# 关闭浏览器
driver.quit()

2.2 查找元素

可以通过多种方式查找页面中的元素:

python 复制代码
# 通过 ID
element_by_id = driver.find_element_by_id('element-id')

# 通过 name
element_by_name = driver.find_element_by_name('element-name')

# 通过 class
element_by_class = driver.find_element_by_class_name('element-class')

# 通过 tag
element_by_tag = driver.find_element_by_tag_name('tag-name')

# 通过 CSS selector
element_by_css = driver.find_element_by_css_selector('css.selector')

# 通过 XPath
element_by_xpath = driver.find_element_by_xpath('//tag[@attribute="value"]')

2.3 交互操作

2.3.1 点击事件
python 复制代码
# 查找并点击按钮
button = driver.find_element_by_id('button-id')
button.click()
2.3.2 输入文本
python 复制代码
# 查找输入框并输入文本
input_box = driver.find_element_by_name('input-name')
input_box.send_keys('Hello, World!')

2.4 获取元素属性和文本

python 复制代码
# 获取属性值
attribute_value = element_by_id.get_attribute('attribute-name')

# 获取文本内容
text_content = element_by_id.text

2.5 等待元素加载

在某些情况下,需要等待元素加载完成:

python 复制代码
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, 'element-id'))
)

2.6 处理弹窗和多窗口

2.6.1 处理 JavaScript 弹窗
python 复制代码
# 切换并接受弹窗
alert = driver.switch_to.alert
alert.accept()
2.6.2 切换窗口
python 复制代码
# 获取所有窗口句柄
handles = driver.window_handles

# 切换到新窗口
driver.switch_to.window(handles[1])

2.7 执行 JavaScript

python 复制代码
# 滚动页面到元素
driver.execute_script("arguments[0].scrollIntoView();", element_by_id)

2.8 截图

python 复制代码
# 保存当前页面截图
driver.save_screenshot('screenshot.png')

2.9 管理 Cookies

python 复制代码
# 获取所有 Cookies
cookies = driver.get_cookies()

# 添加新 Cookie
driver.add_cookie({'name': 'key', 'value': 'value'})

# 删除一个 Cookie
driver.delete_cookie('key')

# 删除所有 Cookies
driver.delete_all_cookies()

3. 高级用法:爬取网页图片

3.1 爬取示例代码

以下是一个使用 Selenium 爬取网页图片的完整示例:

python 复制代码
from selenium import webdriver
import os
import urllib.request

# 设置 ChromeDriver 路径并打开浏览器
driver = webdriver.Chrome(executable_path='path/to/chromedriver')

# 打开目标网页
driver.get('https://www.example.com')

# 查找所有图片元素
images = driver.find_elements_by_tag_name('img')

# 创建保存图片的文件夹
os.makedirs('downloaded_images', exist_ok=True)

# 下载所有图片
for i, img in enumerate(images):
    src = img.get_attribute('src')
    if src:
        print(f"Downloading image {i+1}: {src}")
        # 下载并保存图片
        urllib.request.urlretrieve(src, f'downloaded_images/image_{i+1}.jpg')

# 关闭浏览器
driver.quit()

import urllib.request
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://netflav.com/trending")
element_by_id = driver.find_element(By.ID, 'kw')
element_by_id.send_keys("hello")
driver.find_element(By.ID, 'su').click()
plants = driver.find_elements(By.TAG_NAME, "img")
for idx, img_element in enumerate(plants):
    img_url = img_element.get_attribute('src')
    urllib.request.urlretrieve(src, f'image_{idx+1}.jpg')
driver.quit()

3.2 代码解释

  • 导入库并设置 WebDriver:导入 Selenium 和 Python 标准库用于文件操作和 HTTP 请求。
  • 打开网页并获取图片元素 :使用 find_elements_by_tag_name('img') 获取所有图片元素。
  • 下载图片 :遍历图片元素,获取 src 属性并下载图片到本地。

4. 总结

通过本文的介绍,相信你已经对 Selenium 的基本操作和高级应用有了全面的了解。Selenium 是一个强大且灵活的工具,在自动化测试和数据爬取中都能提供极大便利。通过学习和实践这些功能,可以极大地提升自动化流程的效率。希望这篇文章能帮助你更好地掌握 Selenium。

相关推荐
Learn Beyond Limits15 分钟前
Using per-item Features|使用每项特征
人工智能·python·神经网络·算法·机器学习·ai·吴恩达
哈里谢顿1 小时前
Celery Signal 类详解与实战
python
卓码软件测评1 小时前
第三方应用测试:【移动应用后端API自动化测试:Postman与Newman的集成】
功能测试·测试工具·测试用例·可用性测试
深蓝电商API1 小时前
解析动态数据:如何抓取 JavaScript 加载的 AJAX 内容
爬虫·python
2401_841495642 小时前
【计算机视觉】霍夫变换检测
图像处理·人工智能·python·opencv·算法·计算机视觉·霍夫变换
m0_741585352 小时前
Django开发环境
python·django
一粒马豆2 小时前
python+flask_socketio+pyautogui实现简易远程桌面功能
python·flask·pyautogui·flask_socketio
东方芷兰3 小时前
LLM 笔记 —— 02 大语言模型能力评定
人工智能·笔记·python·神经网络·语言模型·自然语言处理·cnn
羞儿3 小时前
【pytorch】数据增强与时俱进,未来的改进和功能将仅添加到 torchvision.transforms.v2 转换中
pytorch·python·深度学习·数据增强
可触的未来,发芽的智生4 小时前
新奇特:负权重橡皮擦,让神经网络学会主动遗忘
人工智能·python·神经网络·算法·架构