Files
yidaima_tools/docs/baidu.md
王鹏 a2f5875d1b init
2026-04-09 14:55:54 +08:00

3.3 KiB
Raw Permalink Blame History

这个任务非常适合用 Playwright 来实现,因为它对页面加载的等待机制非常智能。

为了保持代码的健壮性,我为你编写了一个独立的脚本。它遵循了我们之前规划的逻辑:启动浏览器 -> 模拟输入 -> 触发搜索 -> 等待结果渲染 -> 全屏截图

🐍 Python 自动化脚本实现

import os
import time
from playwright.sync_api import sync_playwright
from datetime import datetime

def search_baidu_and_screenshot(keyword="java教程"):
    # 1. 准备截图目录
    save_dir = f"./data/screenshots/{datetime.now().strftime('%Y-%m-%d')}"
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    
    file_path = os.path.join(save_dir, f"baidu_search_{keyword}.png")

    with sync_playwright() as p:
        # 启动浏览器 (headless=False 可以让你看到操作过程)
        print("[*] 正在启动 Chromium 浏览器...")
        browser = p.chromium.launch(headless=False) 
        context = browser.new_context(viewport={'width': 1280, 'height': 800})
        page = context.new_page()

        try:
            # 2. 访问百度
            print(f"[*] 正在访问百度...")
            page.goto("https://www.baidu.com", wait_until="networkidle")

            # 3. 定位搜索框并输入关键字
            # 百度搜索框的 ID 通常是 'kw'
            print(f"[*] 输入搜索关键词: {keyword}")
            page.fill("#kw", keyword)

            # 4. 点击“百度一下”按钮
            # 百度搜索按钮的 ID 通常是 'su'
            page.click("#su")

            # 5. 等待搜索结果加载
            # 我们等待结果列表容器出现,确保内容不是空白
            print("[*] 等待搜索结果渲染...")
            page.wait_for_selector("#content_left", timeout=10000)
            
            # 稍微额外等待一下,让图片或样式加载更完整
            time.sleep(2)

            # 6. 截图并保存
            print(f"[*] 正在保存截图至: {file_path}")
            page.screenshot(path=file_path, full_page=True)
            print("[√] 任务完成!")

        except Exception as e:
            print(f"[!] 操作过程中发生错误: {e}")
            # 发生错误时截取当前页面备查
            page.screenshot(path=os.path.join(save_dir, "error_state.png"))
        
        finally:
            browser.close()

if __name__ == "__main__":
    search_baidu_and_screenshot("java教程")

💡 开发要点解析:

  1. 选择器 (Selectors)
    • 百度搜索框的 ID 是 #kw
    • 百度搜索按钮的 ID 是 #su
    • 搜索结果的主体容器 ID 是 #content_left。使用 wait_for_selector 是为了防止在页面还没跳转完就执行截图。
  2. 全屏截图 (full_page=True)
    • 这个参数非常有用,它会自动滚动页面并拼接,将整个搜索结果列表(包括滚动条下方的内容)完整保存下来。
  3. 视口设置 (viewport)
    • 设置固定的分辨率可以保证不同环境下截图的一致性,方便后续交给 Umi-OCR 进行固定区域的文字识别。
  4. 环境准备 如果你还没有安装 Playwright 运行环境,请执行以下命令:
    pip install playwright
    playwright install chromium