Files
yidaima_tools/docs/baidu.md

83 lines
3.3 KiB
Markdown
Raw Normal View History

2026-04-09 14:55:54 +08:00
这个任务非常适合用 **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
```