MiniWoB++(Mini World of Bits++)库包含 100 多个网页交互环境,并提供了用于以编程方式与这些环境交互的 JavaScript 和 Python 接口。Python 接口遵循 Gymnasium API,并使用 Selenium WebDriver 在网页浏览器上执行操作。
MiniWoB++ 是 OpenAI MiniWoB 基准测试的扩展,在论文 Reinforcement Learning on Web Interfaces using Workflow-Guided Exploration 中首次提出。
文档网站位于 miniwob.farama.org。目前 MiniWoB++ 正在持续开发中,以期达到 Farama 成熟项目标准,并将在达到此标准后获得长期维护。更多详情请参阅 项目路线图。如果您想提供帮助,可以加入我们的 Discord 服务器:https://discord.gg/PfR7a79FpQ。
MiniWoB++ 支持 Linux 和 macOS 上的 Python 3.8+。
要安装 MiniWoB++ 库,请使用 pip install miniwob。
我们强烈建议使用 Chrome 或 Chromium 作为网页浏览器,因为其他浏览器可能会以不同方式渲染环境。
MiniWoB++ 的 Python 接口使用 Selenium,它通过 WebDriver API 与浏览器交互。请按照 安装驱动程序的说明方法 之一来安装 ChromeDriver。最简单的方法是 下载 匹配版本的 ChromeDriver,解压缩,然后将包含 chromedriver 可执行文件的目录添加到 PATH 环境变量中:
export PATH=$PATH:/path/to/chromedriver
对于 Chromium,驱动程序也可能通过软件包提供;例如,在 Debian/Ubuntu 中:
sudo apt install chromium-driver
以下代码在 click-test-2 环境中执行一个确定性操作。
import time
import gymnasium
import miniwob
from miniwob.action import ActionTypes
gymnasium.register_envs(miniwob)
env = gymnasium.make('miniwob/click-test-2-v1', render_mode='human')
# 将代码包装在 try-finally 中以确保正确清理。
try:
# 开始一个新回合。
obs, info = env.reset()
assert obs["utterance"] == "Click button ONE."
assert obs["fields"] == (("target", "ONE"),)
time.sleep(2) # 仅在此处让您查看环境。
# 查找文本为 "ONE" 的 HTML 元素。
for element in obs["dom_elements"]:
if element["text"] == "ONE":
break
# 点击该元素。
action = env.unwrapped.create_action(ActionTypes.CLICK_ELEMENT, ref=element["ref"])
obs, reward, terminated, truncated, info = env.step(action)
# 检查操作是否正确。
print(reward) # 应该大约为 0.8,因为已经过去了 2 秒。
assert terminated is True
time.sleep(2)
finally:
env.close()
更多信息请参阅 文档。
MiniWoB++ 库中包含的环境列表可以在 文档 中找到。所有环境共享相同的 观察空间,而 动作空间 可以在环境构建时进行配置。
如需引用此项目,请使用:
@inproceedings{liu2018reinforcement,
author = {Evan Zheran Liu and Kelvin Guu and Panupong Pasupat and Tianlin Shi and Percy Liang},
title = {Reinforcement Learning on Web Interfaces using Workflow-Guided Exploration},
booktitle = {International Conference on Learning Representations ({ICLR})},
url = {https://arxiv.org/abs/1802.08802},
year = {2018},
}