菜鸟-创作你的创作

selenium实战指南

下面给你一份**《Selenium 实战指南》,不是只讲 API,而是从环境搭建 → 核心操作 → 真实场景 → 反爬与稳定性 → 项目级结构**,按**“能跑 + 能用 + 能抗”**的标准来写,特别适合你这种做 爬虫 / 自动化 / 实战项目 的场景。


一、Selenium 是什么?适合干什么?

1️⃣ Selenium 的定位

Selenium = 控制真实浏览器的自动化工具

它能做的事:

2️⃣ Selenium vs Requests

对比RequestsSelenium
JS 渲染
模拟点击
登录验证码部分可
速度
反爬识别

👉 结论


二、环境搭建(Python 实战)

1️⃣ 安装 Selenium

pip install selenium

👉 推荐 Selenium 4.x


2️⃣ 安装浏览器驱动(重点)

✅ Chrome(最常用)

无需手动下载 chromedriver


3️⃣ 第一个 Selenium 程序

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

print(driver.title)

driver.quit()

能正常打开浏览器 → 环境 OK ✅


三、核心对象与结构(必须懂)

1️⃣ WebDriver

driver.get(url)
driver.back()
driver.refresh()
driver.quit()


2️⃣ WebElement


四、元素定位(80% 的问题在这里)

1️⃣ 八种定位方式(重点)

from selenium.webdriver.common.by import By

方式示例
IDBy.ID
NAMEBy.NAME
CLASSBy.CLASS_NAME
TAGBy.TAG_NAME
LINKBy.LINK_TEXT
CSSBy.CSS_SELECTOR
XPATHBy.XPATH

2️⃣ 推荐优先级(实战经验)

ID > CSS > XPath > 其他

CSS 示例

driver.find_element(By.CSS_SELECTOR, "#kw")

XPath 示例

driver.find_element(By.XPATH, "//input[@id='kw']")


3️⃣ XPath 实战写法(必会)

//div[@class='item']
//a[contains(text(),'登录')]
//input[starts-with(@id,'user')]


五、常见操作大全

1️⃣ 输入 & 点击

el = driver.find_element(By.ID, "kw")
el.send_keys("selenium")
el.clear()

driver.find_element(By.ID, "su").click()


2️⃣ 获取信息

el.text
el.get_attribute("href")


3️⃣ 下拉 & 滚动

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


4️⃣ iframe 切换(高频坑)

driver.switch_to.frame("iframe_id")
driver.switch_to.default_content()


5️⃣ 新窗口 / 标签页

handles = driver.window_handles
driver.switch_to.window(handles[-1])


六、等待机制(稳定性的核心)

❌ 禁止大量使用 time.sleep()


1️⃣ 隐式等待(全局)

driver.implicitly_wait(10)


2️⃣ 显式等待(推荐)

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "kw"))
)

👉 实战首选


七、实战案例 1:自动搜索并抓取结果

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

kw = driver.find_element(By.ID, "kw")
kw.send_keys("Python Selenium")
kw.send_keys(Keys.ENTER)

titles = driver.find_elements(By.CSS_SELECTOR, "h3")

for t in titles:
    print(t.text)

driver.quit()


八、反爬 & 稳定性技巧(非常重要)

1️⃣ 常见 Selenium 被识别点


2️⃣ 隐藏 webdriver(基础)

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

driver = webdriver.Chrome(options=options)
driver.execute_script(
    "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
)


3️⃣ 人类行为模拟

import random, time

time.sleep(random.uniform(1, 3))


4️⃣ Headless(慎用)

options.add_argument("--headless=new")

👉 爬虫不推荐,容易被封


九、项目级 Selenium 结构(推荐)

selenium_project/
│
├── driver/
│   └── browser.py
├── pages/
│   └── login_page.py
├── utils/
│   ├── wait.py
│   └── logger.py
├── main.py

👉 Page Object 模式(POM)


十、Selenium 常见异常速查

异常原因
NoSuchElement定位错误
TimeoutException等待不足
StaleElement页面刷新
ElementNotInteractable元素不可点击

十一、Selenium + Requests 混合模式(高级)

用 Selenium 登录 → 拿 Cookie → Requests 跑接口

cookies = driver.get_cookies()

效率直接起飞 🚀


十二、什么时候该“放弃 Selenium”?

👉 改用:


最后一句总结

Selenium 是“最后的武器”,不是第一选择,但一旦用上,必须用对。

退出移动版