Selenium 爬虫实战:从环境搭建到自动化采集

🔹 Selenium 自动化环境安装及各版本差异

Selenium 是一个强大的自动化测试工具,支持多种浏览器。不同版本之间存在一些差异,了解这些差异有助于我们更好地选择和使用。首先,我们需要安装 Selenium 库和对应的浏览器 WebDriver。

python 复制代码
# 安装最新版本的 Selenium
pip install selenium

# 下载对应浏览器的 WebDriver
# 例如 ChromeDriver

Selenium 4 引入了许多新特性,如 DevTools 支持,增强的窗口处理等,而 Selenium 3 则更加稳定和广泛应用。


🔹 Selenium 选择元素

在 Selenium 中,选择元素是自动化测试的核心。我们可以使用不同的选择器来定位元素,包括 ID、Class、CSS 和 XPath 选择器。

🔹 ID选择器

ID选择器是最常用的选择器之一,它根据元素的唯一 ID 属性定位。

python 复制代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://example.com')

element = driver.find_element_by_id('element_id')

🔹 Class选择器

Class选择器根据元素的 class 属性定位,可以用于选择具有相同 class 的多个元素。

python 复制代码
element = driver.find_element_by_class_name('element_class')

🔹 CSS选择器

CSS选择器更加灵活,可以结合多种条件定位元素,非常适合复杂的选择需求。

python 复制代码
element = driver.find_element_by_css_selector('.element_class')

🔹 XPath选择器

XPath 是最强大的选择器,可以通过元素的各种属性进行定位,适用于结构复杂的网页。

python 复制代码
element = driver.find_element_by_xpath('//div[@id="element_id"]')

🔹 Selenium 被监测的特征与绕过方法

Selenium 的行为容易被一些网站检测到,通过一些方法可以绕过这些监测。例如,我们可以通过禁用 AutomationControlled 特性来减少被检测的概率。

python 复制代码
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Chrome(options=options)

🔹 Selenium 浏览器操作

在进行自动化操作时,浏览器的各种操作是必不可少的,包括切换 iframe、窗口,滚动页面,前进和后退等。

🔹 切换iframe

iframe 是嵌入在页面中的子页面,通过 switch_to.frame 方法可以切换到指定的 iframe。

python 复制代码
driver.switch_to.frame('iframe_name')

🔹 切换窗口

当页面打开多个窗口时,可以使用 window_handles 列表获取所有窗口的句柄,并通过 switch_to.window 方法在不同窗口之间切换。

python 复制代码
driver.switch_to.window(driver.window_handles[1])

🔹 滚动页面

通过执行 JavaScript 代码,可以实现页面的滚动操作。

python 复制代码
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

🔹 前进与后退

使用 back 和 forward 方法可以实现浏览器的后退和前进操作。

python 复制代码
driver.back()
driver.forward()

🔹 页面冻结与弹窗处理

页面冻结和弹窗处理是自动化操作中的常见问题。页面冻结可以通过显式等待来处理,而弹窗则需要使用 switch_to.alert 方法进行处理。

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"))
)

# 弹窗处理
alert = driver.switch_to.alert
alert.accept()

🔹 单选、多选与下拉选择框

在表单自动化中,处理单选按钮、多选框和下拉选择框是常见的操作。

python 复制代码
# 单选按钮
radio_button = driver.find_element_by_id('radio_button_id')
radio_button.click()

# 多选框
checkbox = driver.find_element_by_id('checkbox_id')
checkbox.click()

# 下拉选择框
from selenium.webdriver.support.ui import Select

select = Select(driver.find_element_by_id('select_id'))
select.select_by_value('value1')

🔹 隐性等待与显式等待

隐性等待和显式等待是处理动态加载页面的常用方法。隐性等待在查找元素时等待固定时间,而显式等待则等待特定条件的满足。

python 复制代码
# 隐性等待
driver.implicitly_wait(10)

# 显式等待
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "element_id"))
)

通过 Selenium 可以模拟用户登录操作,并获取 cookie 进行后续的数据抓取。

python 复制代码
driver.get('https://example.com/login')
username = driver.find_element_by_id('username')
password = driver.find_element_by_id('password')
login_button = driver.find_element_by_id('login')

username.send_keys('myusername')
password.send_keys('mypassword')
login_button.click()

# 获取 cookie
cookies = driver.get_cookies()
print(cookies)

# 结合 requests 进行数据抓取
import requests

s = requests.Session()
for cookie in cookies:
    s.cookies.set(cookie['name'], cookie['value'])

response = s.get('https://example.com/protected_page')
print(response.text)

🔹 Selenium 采集项目实战

最后,通过一个完整的代码示例,展示了从登录、数据抓取到数据保存的完整流程。

python 复制代码
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
import time

options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')

driver = webdriver.Chrome(options=options)
driver.get('https://example.com')

# 模拟登录
driver.find_element_by_id('username').send_keys('myusername')
driver.find_element_by_id('password').send_keys('mypassword')
driver.find_element_by_id('login').click()

# 等待页面加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'data_container'))
)

# 获取数据
data_elements = driver.find_elements_by_class_name('data_class')
data = [element.text for element in data_elements]

# 数据处理和保存
with open('data.txt', 'w') as f:
    for item in data:
        f.write("%s\n" % item)

driver.quit()

通过以上详细的介绍和代码示例,希望你能够更好地理解和应用 Selenium 进行网页数据采集,并实现数据的自动化处理与展示!🚀

相关推荐
ai小陈5 小时前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力
言乐65 小时前
HTML视频审核模型
python·django·virtualenv·pygame·tornado
言乐66 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
yl45307 小时前
硫酸泄露处理生产商怎么选才够专业
大数据·人工智能·python
笨笨饿7 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网
有毒的教程7 小时前
VMware仅主机模式:物理机 ↔ 虚拟机 文件共享
运维
for_ever_love__8 小时前
机器学习入门——手写线性回归与梯度下降
人工智能·python·学习·机器学习·线性回归
打工仔折腾 AI8 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战
I Am a robert girl8 小时前
当传感器学会“说谎“:拆解可靠性门控的稀疏惯性动捕融合
python·姿态估计·传感器融合·惯性动捕·imu传感器·可靠性门控·可穿戴计算
李航19839 小时前
AI定制柜建模,需要详细的建模规范和标准流程
人工智能·python·计算机视觉·ai·ai编程