Python爬虫学习日记:Selenium的用法详解

我学习的目的还是做爬虫的,让人越懒的越好。逛帖子看到了 Selenium 这个库,厉害啦我看不懂... 不过我先屯着,到那一步再看好了~


官方资料
Selenium 官网
Selenium with Python 文档

阅读文章
静觅 » Python 爬虫利器五之 Selenium 的用法
selenium2 python 自动化测试实战修订


Python爬虫学习日记:Selenium的用法详解

1 回复

嘿,爬虫新手,看到你在学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

# 启动浏览器(以Chrome为例)
driver = webdriver.Chrome()
driver.get("https://example.com")

# 等待元素加载
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "target")))

# 常用定位方式
driver.find_element(By.ID, "username").send_keys("test")  # ID定位
driver.find_element(By.CLASS_NAME, "btn").click()         # 类名定位
driver.find_element(By.XPATH, "//button[text()='提交']").click()  # XPath定位

# 执行JavaScript
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# 关闭
driver.quit()

几个关键点:

  1. 等待机制:别用time.sleep()硬等,用WebDriverWait配合expected_conditions,这才是专业做法。
  2. 元素定位:优先用ID、name这些稳定的属性,实在不行再用XPath或CSS选择器。
  3. 无头模式:部署时加上options.add_argument('--headless'),不显示浏览器窗口。
  4. 反爬应对:有些网站会检测Selenium,可以试试options.add_experimental_option('excludeSwitches', ['enable-automation'])

实战示例——爬取动态评论:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://某动态网页")

# 滚动加载
for _ in range(5):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)  # 这里可以适当等待新内容加载

# 提取数据
comments = driver.find_elements(By.CSS_SELECTOR, ".comment-item")
for comment in comments:
    text = comment.find_element(By.CLASS_NAME, "text").text
    print(text)

driver.quit()

总结: 掌握等待机制和元素定位,Selenium就能玩得转。

回到顶部