启动一个 Chrome 实例,连接到第一个标签页,并打开百度网页。
通过 js() 方法,在页面中选中了一个复选框和一个输入框,并设置了它们的值。
点击页面中的提交按钮,等待5秒钟,然后使用正则表达式提取页面中的 JSON 数据。
最后,通过 repl() 方法进入交互式模式,可以在命令行中查看标签页的 URL 等信息。
具体注释如下:
import asyncio
import json
from ichrome import AsyncChromeDaemon
async def main():
# 创建 AsyncChromeDaemon 对象,并设置一些参数
async with AsyncChromeDaemon(clear_after_shutdown=True, # 关闭标签页后清除缓存
headless=False, # 不使用无头模式
disable_image=False, # 不禁用图片加载
user_data_dir='./ichrome_user_data' # 用户数据目录
) as cd:
# 连接到第一个标签页,并自动关闭
async with cd.connect_tab(0, auto_close=True) as tab:
# 打开百度网页,等待10秒钟
loaded = await tab.goto('https://baidu.com', timeout=10)
# 获取页面 HTML 和标题
html = await tab.html
title = await tab.title
# 打印页面加载情况、HTML 长度和标题
print(
f'page loaded ok: {loaded}, HTML length is {len(html)}, title is "{title}"'
)
# 选中一个复选框和一个输入框,并设置它们的值
await tab.js(
r'''document.querySelector('[value="bacon"]').checked = true''') # 选中一个复选框
await tab.click('[value="cheese"]') # 点击一个复选框
await tab.js(
r'''document.querySelector('[name="custname"]').value = "1234"'''
) # 设置一个输入框的值
# 点击提交按钮,等待5秒钟
await tab.click('form button')
await tab.wait_loading(5)
# 使用正则表达式提取页面中的 JSON 数据
result = await tab.findone(r'<pre.*?>([\s\S]*?)</pre>')
print(result)
# 进入交互式模式,可以在命令行中查看标签页的 URL 等信息。
await tab.repl()
if __name__ == "__main__":
asyncio.run(main())
需要注意的是,ichrome 库的一些方法都是异步方法,需要使用 async with 或 await 等关键字来调用。另外,AsyncChromeDaemon 对象是一个上下文管理器,需要使用 async with 语句创建。在程序结束时,会自动关闭 Chrome 实例并清除缓存。