Selenium 使用指南:从入门到精通
Selenium 使用指南:从入门到精通
Selenium 是一个用于自动化 Web 浏览器操作的强大工具,广泛应用于自动化测试和 Web 数据爬取中。本文将带你从入门到精通地掌握 Selenium,涵盖其基本操作、常用用法以及一个完整的图片爬取示例。
1. 环境配置
1.1 安装 Selenium
在 Python 环境中,可以通过 pip 安装 Selenium:
pip install selenium
1.2 下载 WebDriver
Selenium 需要与特定浏览器的 WebDriver 一起使用。例如,若使用 Chrome 浏览器,需要下载 ChromeDriver 并确保路径已配置好。
1.3 设置 WebDriver 路径
将下载的 WebDriver 解压后,路径可以设置到系统环境变量中,或在代码中指定其位置。
2. Selenium 基本用法
2.1 启动浏览器并打开页面
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 查找元素
可以通过多种方式查找页面中的元素:
# 通过 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 点击事件
# 查找并点击按钮
button = driver.find_element_by_id('button-id')
button.click()
2.3.2 输入文本
# 查找输入框并输入文本
input_box = driver.find_element_by_name('input-name')
input_box.send_keys('Hello, World!')
2.4 获取元素属性和文本
# 获取属性值
attribute_value = element_by_id.get_attribute('attribute-name')
# 获取文本内容
text_content = element_by_id.text
2.5 等待元素加载
在某些情况下,需要等待元素加载完成:
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 弹窗
# 切换并接受弹窗
alert = driver.switch_to.alert
alert.accept()
2.6.2 切换窗口
# 获取所有窗口句柄
handles = driver.window_handles
# 切换到新窗口
driver.switch_to.window(handles[1])
2.7 执行 JavaScript
# 滚动页面到元素
driver.execute_script("arguments[0].scrollIntoView();", element_by_id)
2.8 截图
# 保存当前页面截图
driver.save_screenshot('screenshot.png')
2.9 管理 Cookies
# 获取所有 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 爬取网页图片的完整示例:
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。