0

0

高效配置Selenium在Digital Ocean等无头服务器上进行网页抓取

心靈之曲

心靈之曲

发布时间:2025-09-23 17:11:21

|

593人浏览过

|

来源于php中文网

原创

高效配置Selenium在Digital Ocean等无头服务器上进行网页抓取

本文旨在解决在Digital Ocean等无头服务器环境下运行Selenium脚本时遇到的常见问题,特别是关于DevToolsActivePort file doesn't exist错误和脚本无响应的情况。文章将详细介绍如何通过正确的Chrome/Chromium配置、必要的启动参数以及服务器资源优化来确保Selenium脚本在远程服务器上稳定、高效地运行,并提供完整的代码示例和安装指南。

1. 理解无头服务器环境下的挑战

在本地开发环境中,selenium脚本通常可以轻松运行,因为浏览器有图形界面支持。然而,当将这些脚本部署到像digital ocean droplet这样的远程无头服务器上时,情况会变得复杂。服务器缺乏图形界面,导致浏览器无法正常启动,进而引发如devtoolsactiveport file doesn't exist这样的错误,或者脚本长时间无响应。这通常是由于浏览器启动参数不当、系统资源不足或浏览器安装问题所致。

2. 关键的Chrome/Chromium启动参数配置

为了在无头服务器上成功运行Selenium,需要为Chrome/Chromium浏览器配置一系列特定的启动参数。这些参数旨在模拟一个没有图形界面的运行环境,并解决潜在的兼容性问题。

以下是推荐的ChromeOptions配置:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
# 启用无头模式,'new'是较新的稳定模式
options.add_argument('--headless=new')
# 禁用/dev/shm的使用,这在某些Linux环境中可以避免内存不足的问题
options.add_argument('--disable-dev-shm-usage')
# 禁用GPU加速,无头模式下不需要,且可能导致兼容性问题
options.add_argument('--disable-gpu')
# 以非沙盒模式运行,对于root用户运行尤其重要,避免权限问题
options.add_argument('--no-sandbox')
# 启动时最大化窗口,确保页面元素布局正常
options.add_argument('start-maximized')

# 以下参数根据具体需求可选
# 指定Chrome/Chromium二进制文件的位置。如果系统已正确安装,Selenium通常能自动找到,此行可省略。
# options.binary_location = "/usr/bin/chromium-browser"
# 指定用户数据目录,用于保存浏览器配置文件、缓存等。根据项目需求决定是否使用。
# options.add_argument('--user-data-dir=/home/username/myproject')
# 开启远程调试端口,用于调试无头浏览器,非必需。
# options.add_argument("--remote-debugging-port=9222")

driver = webdriver.Chrome(options=options)

try:
    base_url = 'https://www.wikipedia.org/'
    driver.get(base_url)

    # 示例:抓取页面底部文本
    table_rows = driver.find_element(By.CSS_SELECTOR, ".footer-sidebar-text")
    text = table_rows.text
    print(f"抓取到的文本: {text}")

except Exception as e:
    print(f"脚本执行出错: {e}")
finally:
    driver.quit()
    print("浏览器已关闭。")

参数解释:

  • --headless=new: 启用无头模式。new是推荐的选项,提供了更稳定的无头体验。
  • --disable-dev-shm-usage: 在某些Linux系统上,/dev/shm是一个共享内存文件系统,当其大小不足时,可能导致Chrome崩溃。禁用此选项可以避免这类问题。
  • --disable-gpu: 无头模式下不需要GPU渲染,禁用它可以提高稳定性并减少资源消耗。
  • --no-sandbox: 当Chrome/Chromium在Docker容器或某些Linux服务器上以root用户运行时,沙盒机制可能会导致问题。禁用沙盒是常见的解决方案,但请注意其潜在的安全风险。
  • start-maximized: 确保浏览器窗口以最大化状态启动,这有助于避免某些页面元素因窗口大小问题而无法找到。

3. 确保Chrome/Chromium正确安装

在服务器上运行Selenium之前,必须确保Chrome或Chromium浏览器已正确安装。推荐使用apt包管理器进行安装。

方法一:通过apt安装Chromium-browser

sudo apt update
sudo apt install chromium-browser

方法二:安装Google Chrome稳定版(非Snap版)

某些用户可能偏好安装Google Chrome的官方稳定版,而不是Chromium,或避免使用Snap包管理器安装的版本(Snap版有时在无头环境下有额外配置问题)。可以通过下载.deb包手动安装:

Quillbot
Quillbot

一款AI写作润色工具,QuillBot的人工智能改写工具将提高你的写作能力。

下载
# 下载Google Chrome稳定版deb包
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

# 安装deb包及其依赖
sudo apt install ./google-chrome-stable_current_amd64.deb

安装完成后,可以通过google-chrome --version或chromium-browser --version命令验证安装是否成功。

4. 服务器资源考量:内存是关键

一个常见的但容易被忽视的问题是服务器的内存不足。Chrome/Chromium浏览器,即使在无头模式下,也需要相当多的内存来运行。如果服务器(例如Digital Ocean Droplet)的内存过小(如512MB),浏览器可能无法正常启动,导致脚本挂起或各种奇怪的错误。

建议:

  • 最低内存要求: 建议至少配置1GB或更多的内存给运行Selenium的服务器。
  • Droplet大小调整: 如果您的Digital Ocean Droplet内存不足,请考虑将其大小调整到至少1GB内存的计划。

在调整Droplet大小后,重新尝试运行Selenium脚本,这通常能解决因内存不足导致的启动失败问题。

5. 总结与最佳实践

在无头服务器上运行Selenium进行网页抓取需要对环境和浏览器配置有深入的理解。通过以下步骤,可以大大提高成功率:

  1. 正确配置ChromeOptions:使用--headless=new、--disable-dev-shm-usage、--disable-gpu和--no-sandbox等关键参数。
  2. 确保浏览器安装无误:优先使用apt安装Chromium,或通过下载.deb包安装Google Chrome稳定版。
  3. 检查服务器内存:确保服务器有足够的内存(建议至少1GB)来支持浏览器运行。
  4. 日志与调试:在遇到问题时,检查Selenium和浏览器输出的日志信息,这有助于定位问题。可以通过remote-debugging-port进行远程调试。
  5. 版本兼容性:确保Selenium WebDriver、chromedriver(或chromiumdriver)和Chrome/Chromium浏览器的版本相互兼容。

遵循这些指南,您将能够在Digital Ocean等无头服务器上成功部署并运行您的Selenium网页抓取脚本。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

768

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

729

2023.11.06

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

249

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

494

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

398

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

436

2024.04.08

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1347

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

700

2023.06.29

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

97

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

CSS教程
CSS教程

共754课时 | 18.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号