这个任务非常适合用 **Playwright** 来实现,因为它对页面加载的等待机制非常智能。 为了保持代码的健壮性,我为你编写了一个独立的脚本。它遵循了我们之前规划的逻辑:**启动浏览器 -> 模拟输入 -> 触发搜索 -> 等待结果渲染 -> 全屏截图**。 ### 🐍 Python 自动化脚本实现 ```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 运行环境,请执行以下命令: ```bash pip install playwright playwright install chromium ```