kent 发布的文章

既然你提到了 SeleniumPlaywright,这说明你面对的网页可能存在动态加载、登录校验或者复杂的 JavaScript 交互。

这两者都是通过驱动浏览器内核(Chromium, Firefox 等)来实现模拟的,但 Playwright 是目前更现代、更推荐的选择,而 Selenium 则是行业的老牌标准。


1. Selenium 示例

Selenium 适合习惯经典自动化测试框架的开发者。

准备工作:
pip install selenium(通常还需要下载对应的 WebDriver,如 ChromeDriver)。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time

# 1. 配置浏览器(可选:添加无头模式)
options = webdriver.ChromeOptions()
# options.add_argument('--headless') 

# 2. 启动驱动
driver = webdriver.Chrome(options=options)

try:
    # 3. 访问网页
    driver.get("https://www.baidu.com")
    
    # 4. 模拟交互:定位输入框并搜索
    search_box = driver.find_element(By.ID, "kw")
    search_box.send_keys("Python 爬虫")
    
    search_btn = driver.find_element(By.ID, "su")
    search_btn.click()
    
    # 等待页面加载
    time.sleep(3)
    
    # 5. 获取结果
    print("当前页面标题是:", driver.title)

finally:
    driver.quit() # 记得关闭浏览器

2. Playwright 示例(推荐)

Playwright 由微软开发,支持异步处理,且不需要手动管理驱动文件,它的等待机制(Auto-wait)比 Selenium 更智能。

准备工作:
pip install playwright
playwright install (安装浏览器内核)

from playwright.sync_api import sync_playwright

def run():
    with sync_playwright() as p:
        # 启动 Chromium 浏览器
        browser = p.chromium.launch(headless=False) # 改为 True 则不弹出窗口
        context = browser.new_context(
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) ..."
        )
        page = context.new_page()

        # 1. 访问网页
        page.goto("https://www.bing.com")

        # 2. 交互:等待输入框出现并输入
        page.fill('input[name="q"]', 'Playwright Python')
        page.press('input[name="q"]', 'Enter')

        # 3. 智能等待:等待特定的选择器加载出来
        page.wait_for_selector('.b_algo') 

        # 4. 提取数据
        titles = page.locator('.b_algo h2').all_inner_texts()
        for i, title in enumerate(titles[:5]):
            print(f"结果 {i+1}: {title}")

        # 5. 截图留存
        page.screenshot(path="search_result.png")

        browser.close()

run()

Selenium vs Playwright:核心区别

特性SeleniumPlaywright
等待机制需要手动设置 WebDriverWait自动等待(元素可见、可点击才操作)
速度较慢(基于 HTTP 协议通信)极快(基于 WebSocket 协议)
录制功能依赖插件自带 codegen(直接生成代码)
异步支持不原生支持原生支持 asyncio
环境搭建需手动配 WebDriver一个命令自动安装所有内核

进阶建议:如何选择?

  1. 如果你是新手: 尝试 Playwright。它的录制功能非常强大,你只需要在终端输入 playwright codegen [网址],它会弹出一个浏览器,你点击网页的动作会自动生成对应的 Python 代码。
  2. 如果你在维护老项目: 大概率会遇到 Selenium,它的社区资源(如 StackOverflow 的解答)是最丰富的。
  3. 如何避开反爬: * 隐藏特征: 许多网站会检测 window.navigator.webdriver。对于 Playwright,可以使用 playwright-stealth 插件来隐藏自动化特征。
  4. 无头模式: 虽然 headless=True 运行快,但有些网站会针对无头浏览器进行封锁,必要时建议使用有界面运行。