browser-use报错解决ModuleNotFoundError: No module named ‘mem0’,ValueError: Environment variables not set。
利用浏览器自动登录各种web系统,结合AI agent 识别验证码、登陆请求接口,实现通用的页面登陆请求,批量登陆系统,可以结合代理实现自动切换IP,设置浏览器头,或者用 agent 调用真实的浏览器完成任务工作,不得不说 AI agent 结合 openai或者deepseek 等模型还是很有智能范儿的,比传统的去写脚本登陆系统实现更加通用智能。
python3.13 main.py
INFO [browser_use] BrowserUse logging setup complete with level info
Traceback (most recent call last):
File “/Users/frank/PycharmProjects/browser-use/main.py”, line 2, in
from browser_use import Agent
File “/Users/frank/PycharmProjects/browser-use/browser_use/init.py”, line 6, in
from browser_use.agent.service import Agent as Agent
File “/Users/frank/PycharmProjects/browser-use/browser_use/agent/service.py”, line 26, in
from browser_use.agent.memory.service import Memory, MemorySettings
File “/Users/frank/PycharmProjects/browser-use/browser_use/agent/memory/init.py”, line 1, in
from browser_use.agent.memory.service import Memory, MemorySettings
File “/Users/frank/PycharmProjects/browser-use/browser_use/agent/memory/service.py”, line 12, in
from mem0 import Memory as Mem0Memory
ModuleNotFoundError: No module named ‘mem0’
解决办法:
pip install mem0ai
python3.13 main.py
INFO [browser_use] BrowserUse logging setup complete with level info
INFO [telemetry] Anonymized telemetry enabled. See https://docs.browser-use.com/development/telemetry for more information.
/Users/frank/PycharmProjects/browser-use/browser_use/agent/service.py:306: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
import pkg_resources
INFO [agent] 🧠 Starting an agent with main_model=deepseek-chat, planner_model=None, extraction_model=deepseek-chat
ERROR [agent] Environment variables not set for ChatOpenAI
Traceback (most recent call last):
File “/Users/frank/PycharmProjects/browser-use/main.py”, line 14, in
asyncio.run(main())
~~~~~~~~~~~^^^^^^^^
File “/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py”, line 195, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File “/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py”, line 118, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File “/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/base_events.py”, line 725, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File “/Users/frank/PycharmProjects/browser-use/main.py”, line 8, in main
agent = Agent(
task=“识别下面目标网址中的登陆接口及参数、验证码接口及参数、网页中验证码的元素名称以及xpath路径,把这些信息存储到一个本地文件中。目标网址:http://154.83.15.10:82/”,
llm=ChatOpenAI(model=“deepseek-chat”),
)
File “/Users/frank/PycharmProjects/browser-use/browser_use/utils.py”, line 280, in wrapper
result = func(*args, **kwargs)
File “/Users/frank/PycharmProjects/browser-use/browser_use/agent/service.py”, line 209, in init
raise ValueError(‘Environment variables not set’)
ValueError: Environment variables not set
解决办法:
查看 ‘ .env '文件中是否配置了agent 相关的 API KEY ,不能配置错误,要对应的上。
检查 agent 调用的是什么 gpt 模型,默认 openai 是不用怎么配置,直接写入 相关的 API KEY 即可。
这里以 deepseek 举例使用:
api_key_deepseek = SecretStr(os.getenv('DEEPSEEK_API_KEY') or '')
agent = Agent(
task="识别下面目标网址中的登陆接口及参数、验证码接口及参数、网页中验证码的元素名称以及xpath路径,把这些信息存储到一个本地文件中。目标网址:http://154.83.15.10:82/",
# llm=ChatOpenAI(model="deepseek-chat"),
llm=ChatOpenAI(
base_url='https://api.deepseek.com/v1',
model='deepseek-chat',
api_key=api_key_deepseek,
),
browser_context=browser_context,
)
python3.13 main.py
INFO [browser_use] BrowserUse logging setup complete with level info
INFO [telemetry] Anonymized telemetry enabled. See https://docs.browser-use.com/development/telemetry for more information.
/Users/frank/PycharmProjects/browser-use/browser_use/agent/service.py:306: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
import pkg_resources
INFO [agent] 🧠 Starting an agent with main_model=deepseek-chat, planner_model=None, extraction_model=deepseek-chat
Traceback (most recent call last):
File “/Users/frank/PycharmProjects/browser-use/main.py”, line 59, in
asyncio.run(main())
~~~~~~~~~~~^^^^^^^^
File “/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py”, line 195, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File “/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py”, line 118, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File “/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/base_events.py”, line 725, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File “/Users/frank/PycharmProjects/browser-use/main.py”, line 47, in main
agent = Agent(
task=“识别下面目标网址中的登陆接口及参数、验证码接口及参数、网页中验证码的元素名称以及xpath路径,把这些信息存储到一个本地文件中。目标网址:http://154.83.15.10:82/”,
…<6 lines>…
browser_context=browser_context,
)
File “/Users/frank/PycharmProjects/browser-use/browser_use/utils.py”, line 280, in wrapper
result = func(*args, **kwargs)
File “/Users/frank/PycharmProjects/browser-use/browser_use/agent/service.py”, line 207, in init
if llm_api_env_vars and not check_env_variables(llm_api_env_vars):
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File “/Users/frank/PycharmProjects/browser-use/browser_use/utils.py”, line 320, in check_env_variables
return any_or_all(os.getenv(key).strip() for key in keys)
File “/Users/frank/PycharmProjects/browser-use/browser_use/utils.py”, line 320, in
return any_or_all(os.getenv(key).strip() for key in keys)
^^^^^^^^^^^^^^^^^^^^
AttributeError: ‘NoneType’ object has no attribute ‘strip’
解决办法:
“ .env "文件中需要保证 OPENAI_API_KEY 和 DEEPSEEK_API_KEY 都有配置 API KEY,不知道这算不算是一个bug,即使使用 deepseek 也需要配置。
OPENAI_API_KEY=sk-bc8a6eee785a48932d1cbe97
# ANTHROPIC_API_KEY=
# AZURE_ENDPOINT=
# AZURE_OPENAI_API_KEY=
# GEMINI_API_KEY=
DEEPSEEK_API_KEY=sk-bc8a6eee5a4a5b3652d1cbe97
# Set to false to disable anonymized telemetry
ANONYMIZED_TELEMETRY=true
# LogLevel: Set to debug to enable verbose logging, set to result to get results only. Available: result | debug | info
BROWSER_USE_LOGGING_LEVEL=info
# set this to true to optimize browser-use's chrome for running inside docker
IN_DOCKER=false
USER_AGENT environment variable not set, consider setting it to identify your requests.
解决办法:
确保环境变量在脚本运行时生效:
确保在设置环境变量后立即运行脚本。例如,在 Windows 上,你可以在同一个命令提示符窗口中执行以下命令:
set USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
python your_script.py
在 macOS/Linux 上:
export USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
python your_script.py
在脚本中设置环境变量:
确保在脚本的最开始设置环境变量,以确保它在所有导入之前生效:
import os
os.environ["USER_AGENT"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_community.document_loaders import WebBaseLoader
from langchain.indexes import VectorstoreIndexCreator
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_community.llms import OpenAI
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass("lsv2_pt_f98dbe7435xxxxxxxxx")
model = ChatOpenAI(model="gpt-4")
messages = [
SystemMessage(content="Translate the following from English into Italian"),
HumanMessage(content="hi!"),
]
model.invoke(messages)
检查缓存机制:
LangChain 可能有缓存机制,导致环境变量的更新没有立即生效。你可以尝试清除缓存:
from langchain_core.caches import InMemoryCache
cache = InMemoryCache()
cache.clear()
调试环境变量:
在脚本中打印环境变量以确认它们是否正确设置:
import os
print(os.environ.get("USER_AGENT"))
如果这些方法仍然无法解决问题,请确保你没有在其他地方覆盖或清除环境变量,并检查是否有其他代码段影响了环境变量的设置。
AppKit is not available. Make sure you are running this on macOS with pyobjc installed.
INFO [agent] 📍 Step 1
INFO [agent] 📍 Step 1
ERROR [agent] ❌ Stopping due to 3 consecutive failures
:0: RuntimeWarning: coroutine ‘Agent._verify_llm_connection’ was never awaited
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
解决办法:
检查 agent 任务是否存在难以执行的情况,优化任务提示词,检查浏览器版本是否匹配。
完整脚本实现:
import os
from langchain_openai import ChatOpenAI
from pydantic import SecretStr
from browser_use import Agent
import asyncio
from dotenv import load_dotenv
from browser_use.browser.browser import ProxySettings, Browser, BrowserConfig
from browser_use.browser.context import BrowserContext, BrowserContextWindowSize, BrowserContextConfig
load_dotenv()
async def start():
proxy_settings = ProxySettings(
server='http://non.existent.proxy:9999', bypass='localhost', username='testuser', password='testpass'
)
browser_config = BrowserConfig(
headless=True,
proxy=proxy_settings,
)
# Create window size with specific dimensions we can check
window_size = BrowserContextWindowSize(width=1024, height=768)
# Create browser config with headless mode
browser_config = BrowserConfig(
headless=True, # Use headless for faster test
)
# Create context config with our window size
context_config = BrowserContextConfig(
browser_window_size=window_size,
maximum_wait_page_load_time=2.0, # Faster timeouts for test
minimum_wait_page_load_time=0.2,
no_viewport=True, # Use actual window size instead of viewport
)
# Create browser
browser = Browser(config=browser_config)
browser_context = BrowserContext(browser=browser, config=context_config)
api_key_deepseek = SecretStr(os.getenv('DEEPSEEK_API_KEY') or '')
agent = Agent(
# task="识别下面目标网址中的登陆接口及参数、验证码接口及参数、网页中验证码的元素名称以及xpath路径,找到登陆界面后遇到表单可以尝试输入测试数据并点击相关的登陆按钮进行请求,分析找到登陆的请求接口和参数,注意不是网页的URL而是直接执行登陆动作请求的后端接口,以及验证码请求接口和参数,打印这些接口信息的时候显示为完整的接口路径,不要用相对路径,把这些信息的完整信息最终结果通过 json 格式进行返回打印展示。目标网址:http://154.83.15.10:82/",
task="识别下面目标网址中的登陆接口及参数、验证码接口及参数、网页中验证码的元素名称以及xpath路径,找到登陆界面后遇到表单可以尝试输入测试数据并点击相关的登陆按钮进行请求,记录点击登陆的进行的请求接口和参数,如果验证码错误则不在尝试,打印这些接口信息的时候显示为完整的接口路径,不要用相对路径,把这些信息的完整信息最终结果通过 json 格式进行返回打印展示。目标网址:https://ppm.webank.com:13284",
# llm=ChatOpenAI(model="deepseek-chat"),
llm=ChatOpenAI(
base_url='https://api.deepseek.com/v1',
model='deepseek-chat',
api_key=api_key_deepseek,
),
use_vision=False,
# browser_context=browser_context,
)
await agent.run()
asyncio.run(start())
完整运行:
INFO [browser_use] BrowserUse logging setup complete with level info
INFO [telemetry] Anonymized telemetry enabled. See https://docs.browser-use.com/development/telemetry for more information.
/Users/frank/PycharmProjects/browser-use/browser_use/agent/service.py:306: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
import pkg_resources
INFO [agent] 🧠 Starting an agent with main_model=deepseek-chat, planner_model=None, extraction_model=deepseek-chat
INFO [agent] 🚀 Starting task: 识别下面目标网址中的登陆接口及参数、验证码接口及参数、网页中验证码的元素名称以及xpath路径,把这些信息存储到一个本地文件中。目标网址:http://154.83.15.10:82/
INFO [agent] 📍 Step 1
AppKit is not available. Make sure you are running this on macOS with pyobjc installed.
INFO [agent] 🤷 Eval: Unknown - The current page is blank, and no interactive elements are available.
INFO [agent] 🧠 Memory: Starting the task by navigating to the target URL: http://154.83.15.10:82/. This is step 1 out of 100.
INFO [agent] 🎯 Next goal: Navigate to the target URL to begin analyzing the login and captcha interfaces.
INFO [agent] 🛠️ Action 1/1: {"go_to_url":{"url":"http://154.83.15.10:82/"}}
INFO [controller] 🔗 Navigated to http://154.83.15.10:82/
INFO [agent] 📍 Step 2
INFO [agent] 👍 Eval: Success - Successfully navigated to the target URL: http://154.83.15.10:82/.
INFO [agent] 🧠 Memory: Step 1: Navigated to the target URL. Step 2: Identified the '登录' (Login) link. Next goal: Click on the login link to analyze the login interface a captcha elements.
INFO [agent] 🎯 Next goal: Click on the '登录' link to proceed to the login page.
INFO [agent] 🛠️ Action 1/1: {"click_element_by_index":{"index":1}}
INFO [controller] 🖱️ Clicked button with index 1: 登录
INFO [agent] 📍 Step 3
INFO [agent] 👍 Eval: Success - Successfully navigated to the login page and identified the login form elements.
INFO [agent] 🧠 Memory: Step 1: Navigated to the target URL. Step 2: Clicked the login link. Step 3: Identified the login form elements, including username, password, and captcha fields. Next goal: Extract the login interface parameters and captcha details.
INFO [agent] 🎯 Next goal: Extract the login interface parameters and captcha details.
INFO [agent] 🛠️ Action 1/1: {"extract_content":{"goal":"Extract the login interface parameters, captcha interface parameters, and the xpath of the captcha element.","should_strip_link_urls":false}}
INFO [controller] 📄 Extracted from page
: ```json
{
"login_interface_parameters": {
"username_field": "账号",
"password_field": "密码"
},
"captcha_interface_parameters": {
"captcha_image_url": "/user/captcha/image?action=login",
"action": "login"
},
"captcha_element_xpath": {
"xpath": "//img[contains(@src, '/user/captcha/image')]"
}
}
INFO [agent] 📍 Step 4
INFO [agent] 👍 Eval: Success - Successfully extracted the login interface parameters, captcha interface parameters, and the xpath of the captcha element.
INFO [agent] 🧠 Memory: Step 1: Navigated to the target URL. Step 2: Clicked the login link. Step 3: Identified the login form elements. Step 4: Extracted the login interface parameters, captcha interface parameters, and the xpath of the captcha element. Next goal: Save the extracted information to a local file.
INFO [agent] 🎯 Next goal: Save the extracted information to a local file.
INFO [agent] 🛠️ Action 1/1: {"done":{"text":"Extracted information:\n- Login interface parameters:\n - Username field: '账号'\n - Password field: '密码'\n- Captcha intee parameters:\n - Captcha image URL: '/user/captcha/image?action=login'\n - Action: 'login'\n- Captcha element XPath: '//img[contains(@src, '/user/captcha/image')]'","success":true}}
INFO [agent] 📄 Result: Extracted information:
- Login interface parameters:
- Username field: '账号'
- Password field: '密码'
- Captcha interface parameters:
- Captcha image URL: '/user/captcha/image?action=login'
- Action: 'login'
- Captcha element XPath: '//img[contains(@src, '/user/captcha/image')]'
INFO [agent] ✅ Task completed
INFO [agent] ✅ Successfully