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

news2024/11/29 5:55:18
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中使用示例代码:

# 启动 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构2:顺序表

目录 1.线性表 2.顺序表 2.1概念及结构 2.2接口实现 1.线性表 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串 线性表在逻辑上是线性结构,也就说…

Java 反射(Reflection)

Java 反射(Reflection) Java 反射(Reflection)是一个强大的特性,它允许程序在运行时查询、访问和修改类、接口、字段和方法的信息。反射提供了一种动态地操作类的能力,这在很多框架和库中被广泛使用&#…

利用Python爬虫阿里巴巴中国站获得跨境属性的详细指南

在全球化贸易的背景下,跨境电商成为了连接全球买家和卖家的重要桥梁。阿里巴巴中国站作为全球知名的B2B电子商务平台,提供了海量的商品信息,其中跨境属性信息对于跨境电商尤为重要。本文将详细介绍如何使用Python编写爬虫,从阿里巴…

【JavaEE】Spring Web MVC

目录 一、Spring Web MVC简介1.1 MVC简介1.2 Spring MVC1.3 RequestMapping注解1.3.1 使用1.3.2 RequestMapping的请求设置1.3.2.1 方法11.3.2.2 方法2 二、Postman介绍2.1 创建请求2.2 界面如下:2.3 传参介绍 一、Spring Web MVC简介 官方文档介绍: Sp…

实现 Browser 客户端下载 XML 文件功能

后端 使用 io.BytesIO 方法 创建一个字节缓冲区在不需要磁盘文件的情况下进行文件操作打包为 zip 压缩包(上图代码)in_memory_zip.seek(0) 数据写入ZIP后文件指针会停留在缓冲区的末尾将文件指针重置回开头make_response() 方法用于创建HTTP响应的函数.g…

【SPIE出版|四大高校联合举办】先进算法与图像处理技术国际学术会议(IC-AAIP 2025)

📚IC-AAIP 2025【ISSN:0277786X】 2025年先进算法与图像处理技术国际学术会议 ⏰时间:2025年8月9日至10日 👀地点:中国沈阳 📝出版商:SPIE 组委负责人刘老师:13660240104 2025年先…

设备内存指纹修改

一、前端通过获取Navigator.deviceMemory来查询系统内存。 二、Navigator.deviceMemory 1、navigator_device_memory.idl接口定义: // https://github.com/w3c/device-memory#the-web-exposed-apiinterface mixin NavigatorDeviceMemory {[HighEntropyDirect,Meas…

市面上好用的AIPPT-API接口

文多多 AiPPT | 一键搞定PPT 文多多 AiPPT | 一键搞定PPT文多多AiPPT,一键搞定PPT。AI根据主题、文档、网址智能生成PPT文档,同时支持在线编辑、美化、排版、导出、一键动效、自动生成演讲稿等功能,告别工作烦恼!https://docmee.…

基于.NET调用WebService服务

基于.NET调用WebService服务 上一篇文章用java的Spring Boot框架搭建了一个WebService服务端,这篇文章通过.NET进行调用,下文基于Visual Studio 2022 引入WebService服务 项目右键 -> 添加 -> 服务引用 选择WCF Web Service,点击下一…

非协议默认端口的:NAT alg需配置port-mapping

参考解释文章: https://zhiliao.h3c.com/Theme/details/167990 https://zhiliao.h3c.com/Theme/details/44359 nat的alg和port-mapping - 知了社区 NAT alg的功能 NAT ALG(Application Level Gateway,应用层网关)主要完成对应用…

UDP客户端服务器通信

在这篇博客中,我们将探索 UDP(用户数据报协议) 通信,简要地说,UDP 是一种无连接、快速但不可靠的通信协议,适用于需要快速数据传输但对丢包容忍的场景,比如视频流和在线游戏。就像《我是如此相信…

Flutter:封装发送验证码组件,注册页使用获取验证码并传递控制器和验证码类型

验证码&#xff1a;view import package:flutter/material.dart; import package:get/get.dart; import index.dart;class SendcodePage extends GetView<SendcodeController> {// 接收注册页面&#xff0c;传进来的手机号控制器&#xff0c;和发送验证码的类型final Tex…

【再谈设计模式】装配器模式 ~复杂结构构建的巧匠

一、引言 在软件开发过程中&#xff0c;创建复杂对象往往是一项具有挑战性的任务。传统的直接实例化对象的方式在面对复杂对象构建时&#xff0c;可能会导致代码的可维护性、可读性和扩展性变差。这时候&#xff0c;我们就需要一些设计模式来优雅地解决这些问题&#xff0c;装配…

牛客周赛 Round 69 C-E

C——仰望水面的歪 一、题目描述&#xff1a; 一看这个题目是不是觉得是物理问题&#xff0c;我也觉得是这样的&#xff0c;全反射我都快忘记了&#xff0c;结果发现他居然还能这样看&#xff0c;请看图片&#xff1a; 第一种情况&#xff1a;当目标点在小歪所在平面的上面得…

【C++】C++新增特性解析:Lambda表达式、包装器与绑定的应用

V可变参数模板与emplace系列 C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现…

狂野飙车8+(Asphalt 8+) for Mac 赛车竞速游戏 安装教程

Mac分享吧 文章目录 狂野飙车8(Asphalt 8) for Mac 赛车竞速游戏软件 效果图展示一、狂野飙车8(Asphalt 8) 赛车竞速游戏 Mac电脑版——v2.1.11️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件2.1 左侧安装包拖入右侧文件夹中&#xff0c;等待安装完成&#xff0c;运行软件…

共享售卖机语音芯片方案选型:WTN6020引领智能化交互新风尚

在共享经济蓬勃发展的今天&#xff0c;共享售卖机作为便捷购物的新形式&#xff0c;正逐步渗透到人们生活的各个角落。为了提升用户体验&#xff0c;增强设备的智能化和互动性&#xff0c;增加共享售卖机的语音功能就显得尤为重要。 共享售卖机语音方案选型&#xff1a; WTN602…

.net core MVC入门(一)

文章目录 项目地址一、环境配置1.1 安装EF core需要包1.2 配置数据库连接二、使用EF创建表2.1 整体流程梳理2.1 建表详细流程2.1.1 创建一个Category的Model2.1.2 创建Category的EF实体三、添加Category页面的视图3.1整体流程梳理3.2 添加Controller3.3 添加View 视图四、使用E…

vue修改el-table-column背景色和上下margin外边距调整行间距方法教程

在vue中需要修改el-table表格中每一行el-table-column背景色&#xff0c;还有table表格中数据太多&#xff0c;看起来臃肿&#xff0c;需要margin调整上下边距&#xff0c;直接使用margin不生效&#xff0c;是因为display使用的是table属性&#xff0c;所以我们要利用table特性…

Spring框架整合单元测试

目录 一、配置文件方式 1.导入依赖 2.编写类和方法 3.配置文件applicationContext-test.xml 4.测试类 5.运行结果 二、全注解方式 1.编写类和方法 2.配置类 3.测试类 4.运行结果 每次进行单元测试的时候&#xff0c;都需要编写创建工厂&#xff0c;加载配置文件等相关…