在无界面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()
相关推荐
顶点多余5 分钟前
Linux“信号“从硬件到软件详解
linux·运维·服务器
乐分启航9 分钟前
SliMamba:十余K参数量刷新SOTA!高光谱分类的“降维打击“来了
java·人工智能·深度学习·算法·机器学习·分类·数据挖掘
勘察加熊人19 分钟前
ai飞卢小说自动化处理工作流获得提问素材
运维·自动化
网络点点滴21 分钟前
组件通信-作用域插槽
前端·javascript·vue.js
_codemonster24 分钟前
被子植物门 —— 纲、目、科详细梳理 + 分类依据
人工智能·分类·数据挖掘
瀚高PG实验室1 小时前
rpm包安装报错:cannot open Packages index using db5 - Cannot allocate memory (12)
linux·运维·服务器·瀚高数据库
云计算老刘1 小时前
2. DNS 服务器
运维
水星灭绝1 小时前
win11+wsl2+docker
运维·docker·容器
追风少年王大爷丶1 小时前
nginx 配置无域名访问拒绝
运维·服务器·nginx
kyriewen111 小时前
异步编程:从“回调地狱”到“async/await”的救赎之路
开发语言·前端·javascript·chrome·typescript·ecmascript·html5