0


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

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

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

# 安装最新版本的 Selenium
pip install selenium

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

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


🔹 Selenium 选择元素

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

🔹 ID选择器

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

from selenium import webdriver

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

element = driver.find_element_by_id('element_id')

🔹 Class选择器

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

element = driver.find_element_by_class_name('element_class')

🔹 CSS选择器

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

element = driver.find_element_by_css_selector('.element_class')

🔹 XPath选择器

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

element = driver.find_element_by_xpath('//div[@id="element_id"]')

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

Selenium 的行为容易被一些网站检测到,通过一些方法可以绕过这些监测。例如,我们可以通过禁用

AutomationControlled

特性来减少被检测的概率。

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

🔹 Selenium 浏览器操作

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

🔹 切换iframe

iframe 是嵌入在页面中的子页面,通过

switch_to.frame

方法可以切换到指定的 iframe。

driver.switch_to.frame('iframe_name')

🔹 切换窗口

当页面打开多个窗口时,可以使用

window_handles

列表获取所有窗口的句柄,并通过

switch_to.window

方法在不同窗口之间切换。

driver.switch_to.window(driver.window_handles[1])

🔹 滚动页面

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

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

🔹 前进与后退

使用

back

forward

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

driver.back()
driver.forward()

🔹 页面冻结与弹窗处理

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

switch_to.alert

方法进行处理。

# 页面冻结处理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()

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

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

# 单选按钮
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')

🔹 隐性等待与显式等待

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

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

🔹 Selenium 模拟登录与 cookie 处理

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

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 采集项目实战

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

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]# 数据处理和保存withopen('data.txt','w')as f:for item in data:
        f.write("%s\n"% item)

driver.quit()

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


本文转载自: https://blog.csdn.net/weixin_52392194/article/details/140924094
版权归原作者 _.Switch 所有, 如有侵权,请联系我们删除。

“Selenium 爬虫实战:从环境搭建到自动化采集”的评论:

还没有评论