在无界面ubuntu服务器上配置chrome浏览器,结合undetected_chromedriver实现数据抓取!不使用sudo权限安装chrome浏览器!

import undetected_chromedriver as uc

driver = uc.Chrome(options=options)

问题:uc.Chrome在Linux服务器运行时出现报错: Binary Location Must be a String - Linux

其原因是因为服务器上没有安装chrome浏览器,系统找不到可执行路径。

大多数解决办法为:如下链接

sudo pacman -S chromium 或者 sudo snap install chromium

或者sudo apt install google-chrome-stable

这些都需要root用户的sodu权限,这是由于在linux中安装和运行程序的要求。但是我们在租服务器时有时不是root用户。

"TypeError: Binary Location Must be a String" on Linux Mint with basic code · Issue #2011 · ultrafunkamsterdam/undetected-chromedriver
No Binary Location / Binary Location Must be a String - Linux · Issue #1544 · ultrafunkamsterdam/undetected-chromedriver

解决:在自己账户下安装chrome浏览器:

一.安装chrome

下载 Chrome 的便携版本(无需安装)

Google 提供了一些便携式(portable)版本,可以直接下载并运行,而无需安装到系统路径。

  1. 下载 Chrome 安装包

    打开终端并运行以下命令下载 .deb 文件:

    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

  2. 解压 .deb 文件

    Debian 文件实际上是一个归档包,可以使用 ar 工具提取内容。运行以下命令(无需 sudo):

    ar x google-chrome-stable_current_amd64.deb tar -xvf data.tar.xz

    这会在当前目录解压出 Chrome 的文件。

  3. 找到 Chrome 可执行文件

    解压后,您会在 opt/google/chrome/ 目录下找到 Chrome 可执行文件。可以通过以下命令启动:

    ./opt/google/chrome/chrome
    此时会报错:[1128/155453.382705:WARNING:chrome_main_linux.cc(80)] Read channel stable from ./opt/google/chrome/CHROME_VERSION_EXTRA [582953:582953:1128/155453.396982:FATAL:setuid_sandbox_host.cc(163)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /home/zhubin/workspace/Chromium/opt/google/chrome/chrome-sandbox is owned by root and has mode 4755. Trace/breakpoint trap (core dumped)

二、无头运行chrome

上面是一个常见的问题,尤其是在没有 sudo 权限的情况下尝试运行 Google Chrome 或 Chromium。错误信息指出 SUID sandbox helper binary 配置不正确。由于没有 sudo 权限,无法更改文件的所有者或权限。

解决办法:

./opt/google/chrome/chrome --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --remote-debugging-port=9222

出现:[1128/155748.393876:WARNING:chrome_main_linux.cc(80)] Read channel stable from ./opt/google/chrome/CHROME_VERSION_EXTRA DevTools listening on ws://127.0.0.1:9222/devtools/browser/ff9e1148-3944-4415-983d-25607d77c263

运行成功!

这意味着您已经成功启动了 Chrome 的 无头模式 (Headless mode),并且浏览器正在监听调试端口 9222,等待接受远程调试连接。这种模式非常适合自动化任务,如网页抓取、自动化测试等。

在python中使用示例代码:

python 复制代码
# 启动 Undetected ChromeDriver
options = uc.options.ChromeOptions()
# options.add_argument("--start-maximized")  # 窗口最大化
options.binary_location = "/home/workspace/Chromium/opt/google/chrome/chrome"
# 添加参数与无头 Chrome 交互
options.add_argument("--no-sandbox")
options.add_argument("--disable-setuid-sandbox")
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--remote-debugging-port=9222")

driver = uc.Chrome(options=options)

# 测试打开网页 
driver.get("https://www.google.com") 
print("Page Title:", driver.title) 


cookie_list=[]
# 将每个 Cookie 添加到浏览器
for cookie in cookie_list:
    name, value = cookie.split("=", 1)  # 按等号拆分
    driver.add_cookie({
        "name": name,
        "value": value,
        "domain": "xxx.com"  # 确保域名正确
    })

# 刷新页面以应用 Cookie
driver.refresh()
# 打开目标页面,验证是否已成功加载 Cookie
driver.get(url)
redirected_url = driver.current_url  # 或通过 driver.page_source 解析 HTML
response = requests.get(redirected_url, headers=headers)
print("Extracted URL:", redirected_url)
# 获取整个页面的html内容
page_source = driver.page_source

# 关闭浏览器 
driver.quit()
相关推荐
我不当帕鲁谁当帕鲁几秒前
arcgis for js点击聚合要素查询其包含的所有要素
前端·javascript·arcgis
shawya_void9 分钟前
javaweb-day03-前端零碎
前端
橙子小哥的代码世界20 分钟前
NLP任务四大范式的进阶历程:从传统TF-IDF到Prompt-Tuning(提示词微调)
人工智能·深度学习·神经网络·自然语言处理·prompt·tf-idf
灰色人生qwer27 分钟前
webpack 项目访问静态资源
前端·webpack·node.js
Mr_wilson_liu31 分钟前
ModuleNotFoundError: No module named ‘_ssl‘ centos中的Python报错
linux·运维·centos
看到请催我学习32 分钟前
js判断空对象
开发语言·前端·javascript·json
YRr YRr1 小时前
深度学习Pytorch中的模型保存与加载方法
人工智能·pytorch·深度学习
0_11 小时前
让你的网页变的高大上:国际化Vue-i18n
前端·javascript·vue.js
谷隐凡二1 小时前
fiddler安卓雷电模拟器配置踩坑篇
前端·测试工具·fiddler
西红柿炖前男友1 小时前
toolTip文字溢出如何解决?给你几个万能移植方案!
前端·javascript