LangChain中UnstructuredURLLoader/SeleniumURLLoader加载JS网站失败排查
尝试用LangChain的文档加载器加载网站URL时,UnstructuredURLLoader对部分JS渲染的网站返回如下结果:
(Document(page_content='Please enable JS and disable any ad blocker', metadata={'source': 'https://wellfound.com/company/chorus-one'})
于是改用文档推荐的SeleniumURLLoader解决JS渲染问题,执行pip install selenium webdriver_manager安装了selenium 4.10.0和webdriver-manager 3.8.6后,运行以下代码:
from langchain.document_loaders import UnstructuredURLLoader, SeleniumURLLoader loaders = SeleniumURLLoader(urls=urls) data = loaders.load()
却持续报错:
The version of chrome cannot be detected. Trying with latest driver version
WebDriverException: Message: unknown error: cannot find Chrome binary
Stacktrace:
#0 0x55c7d5ee44e3
#1 0x55c7d5c13c76
#2 0x55c7d5c3a757
#3 0x55c7d5c39029
#4 0x55c7d5c77ccc
#5 0x55c7d5c7747f
#6 0x55c7d5c6ede3
#7 0x55c7d5c442dd
#8 0x55c7d5c4534e
#9 0x55c7d5ea43e4
#10 0x55c7d5ea83d7
#11 0x55c7d5eb2b20
#12 0x55c7d5ea9023
#13 0x55c7d5e771aa
#14 0x55c7d5ecd6b8
#15 0x55c7d5ecd847
#16 0x55c7d5edd243
#17 0x7fbddad0d609 start_thread
报错核心是系统找不到Chrome浏览器的二进制文件,或webdriver-manager无法自动检测Chrome版本,按以下步骤排查:
确认Chrome已安装
检查系统是否安装了Google Chrome浏览器,未安装的话直接下载对应系统版本的Chrome完成安装。手动指定Chrome二进制文件路径
如果Chrome安装在非默认路径(自定义安装位置、Linux下的非标准目录),需在代码中明确指定路径:from langchain.document_loaders import SeleniumURLLoader from selenium.webdriver.chrome.options import Options chrome_options = Options() # Windows示例路径 chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe" # Linux示例路径 # chrome_options.binary_location = "/usr/bin/google-chrome" # macOS示例路径 # chrome_options.binary_location = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" loaders = SeleniumURLLoader( urls=urls, chrome_options=chrome_options ) data = loaders.load()匹配Chrome与ChromeDriver版本
- 打开Chrome,在地址栏输入
chrome://version/查看浏览器版本号 - 手动下载对应版本的ChromeDriver,然后在代码中指定驱动路径:
from langchain.document_loaders import SeleniumURLLoader from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service chrome_options = Options() service = Service(executable_path="/path/to/chromedriver") # 替换为你的chromedriver实际路径 loaders = SeleniumURLLoader( urls=urls, chrome_options=chrome_options, service=service ) data = loaders.load()
- 打开Chrome,在地址栏输入
配置环境变量(Linux/macOS)
若Chrome二进制文件不在系统PATH中,可通过软链接将其添加到标准目录:sudo ln -s /实际的chrome安装路径/chrome /usr/bin/google-chrome
内容的提问来源于stack exchange,提问作者mCs

