远程ubuntu 20.04服务器运行python+selenium+pyautogui 爬虫解决方案

背景

已经开发了一套基于python+selenium+pyautogui的爬虫脚本,通过mobaxterm远程Ubuntu服务器,让脚本在服务器上一直运行,需要用到虚拟图形界面

1、安装Google Chrome:

首先,使用wget命令下载Google Chrome的最新稳定版.deb包:

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

然后,使用dpkg命令安装下载的.deb包:

sudo dpkg -i google-chrome-stable_current_amd64.deb

如果在安装过程中遇到依赖问题,可以使用以下命令来解决:

sudo apt-get install -f

如果有以下类似报错:

dependency problems - leaving unconfigured Processing triggers for
mime-support (3.64ubuntu1) … Errors were encountered while processing:
google-chrome-stable

执行以下命令,即可以解决报错

apt --fix-broken install ./google-chrome-stable_current_amd64.deb

安装完成后,可以通过运行以下命令来检查Chrome的版本:
google-chrome --version

2、安装ChromeDriver:

访问 https://googlechromelabs.github.io/chrome-for-testing/#stable 这个地址去下载更新的chromedriver

wget  https://storage.googleapis.com/chrome-for-testing-public/127.0.6533.119/linux64/chromedriver-linux64.zip

然后到目录中执行:

unzip chromedriver-linux64.zip
cd chromedriver-linux64 
mv chromedriver /usr/bin 

3、安装虚拟显示器

使用 Xvfb(X Virtual Framebuffer)可以模拟一个虚拟的显示环境,这对于需要图形界面但不需要实际显示输出的自动化脚本非常有用。以下是在 Ubuntu 服务器上设置 Xvfb 的步骤:

  1. 安装 Xvfb:
    在 Ubuntu 服务器上,你可以通过以下命令安装 Xvfb

    sudo apt-get update
    sudo apt-get install xvfb
    
  2. 启动 Xvfb:
    使用 Xvfb 启动一个虚拟显示。通常,我们使用 :1 作为虚拟显示的显示器编号:

    Xvfb :1 -screen 0 1366x768x24 &
    

    这条命令会启动一个虚拟的 1366x768 分辨率,24 位颜色深度的显示器。
    查看启动的虚拟显示器

    ps aux | grep Xvfb
    
  3. 配置环境变量:
    为了让应用程序使用这个虚拟的显示环境,你需要设置 DISPLAY 环境变量。在你的脚本或启动命令中添加以下行:

     # 启动虚拟屏幕
     nohup Xvfb :1 -screen 0 1366x768x24 &
     
     sleep 3  # 等待3秒,确保 Xvfb 启动完成
     
     # 使用虚拟屏幕
     export DISPLAY=:1
     # 运行搜价服务脚本
     cd /home/hello/spider
     
     nohup python3 spider.py > pricing.log 2>&1 &
     if [ $? -ne 0 ]; then  
         echo "Error running spider.py"  
         exit 1  
     fi  
     echo "Pricing script have been executed successfully."
    

    确保在调用 Python 脚本之前设置这个环境变量。

  4. 运行你的 Python 脚本:
    现在你可以运行你的 Python 脚本了。如果脚本需要图形界面,它将使用 Xvfb 虚拟的显示环境而不是尝试连接到一个真实的显示器。

  5. 自动化启动 Xvfb:
    如果你希望每次服务器启动时自动启动 Xvfb,你可以将其添加到 /etc/rc.local 文件中(如果你的系统使用 System V init),或者作为一个服务使用 systemd 来管理。

    使用 systemd 创建一个服务的示例:

    • 创建一个新的服务文件,例如 /etc/systemd/system/xvfb.service
      [Unit]
      Description=Start Xvfb for headless operation
      
      
      [Service]
      ExecStart=/usr/bin/Xvfb :1 -screen 0 1366x768x24 -ac
      Restart=always
      
      
      [Install]
      WantedBy=multi-user.target
      
    • 启用并启动服务:
      sudo systemctl enable xvfb.service
      sudo systemctl start xvfb.service
      

使用 Xvfb 的好处是,你可以在没有物理显示器或 X11 转发的情况下运行需要图形界面的应用程序。这对于服务器环境或持续集成/持续部署(CI/CD)流程非常有用。

运行报错

运行脚本报错问题:

buntu报错selenium.common.exceptions.SessionNotCreatedException:
Message: session not created: Chrome failed to start: exited normally.
(session not created: DevToolsActivePort file doesn’t exist) (The
process started from chrome location
/snap/chromium/2925/usr/lib/chromium-browser/chrome is no longer
running, so ChromeDriver is assuming that Chrome has crashed.)

可能是代码中 chromedriver_path 的位置配错了
查看 chromedriver 的位置使用 which chromedriver

其他

虚拟框架(如 Xvfb)和 ubuntu-desktop、xfce4、lxde等图形界面有啥区别?

Xvfbubuntu-desktop 是两个不同的组件,它们在功能和用途上有明显的区别:

  1. Xvfb (X Virtual Framebuffer):

    • Xvfb 是一个虚拟的显示服务器,它模拟了一个 X 服务器的运行环境,但是不提供实际的图形输出。这意味着它不会显示任何图形界面,但它允许图形应用程序认为它们正在与一个显示器交互。
    • 它主要用于自动化测试、服务器环境或者任何需要图形界面但不需要实际显示输出的情况。
    • Xvfb 通常用于开发和测试需要图形界面的应用程序,因为它可以在没有物理显示器或图形硬件的情况下运行。
  2. ubuntu-desktop:

    • ubuntu-desktop 是 Ubuntu 操作系统的桌面环境,它提供了一个完整的图形用户界面(GUI),包括窗口管理器、桌面环境、系统菜单和其他用户交互工具。
    • 它允许用户通过图形界面与操作系统进行交互,包括启动应用程序、管理文件和执行其他任务。
    • ubuntu-desktop 通常用于个人电脑或工作站,为用户提供了一个友好的图形界面来操作电脑。

主要区别:

  • 用途: Xvfb 主要用于开发和测试,而 ubuntu-desktop 用于日常使用和交互。
  • 图形输出: Xvfb 不提供图形输出,而 ubuntu-desktop 提供完整的图形用户界面。
  • 环境依赖: Xvfb 可以在没有图形硬件的情况下运行,而 ubuntu-desktop 需要图形硬件来显示界面。
  • 用户交互: Xvfb 不提供用户交互界面,ubuntu-desktop 提供了完整的用户交互环境。

Xvfb 是一个无头(headless)的解决方案,适用于需要图形界面支持但不需要显示给用户看的应用程序,而 ubuntu-desktop 是一个完整的桌面环境,提供了用户可以直接交互的图形界面。

一开始把这两者搞混了,以为只要安装了图形界面就可以运行爬虫了,结果打开的是本机的谷歌浏览器,使用了x11转发,只要一关闭mobaxterm,脚本就报错。

  • 13
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu 20.04上安装Notepad需要使用Snap程序包管理器。根据引用和的信息,您可以通过在终端中输入以下命令来安装Notepad: sudo snap install notepad-plus-plus 这将下载并安装Notepad及其所有依赖项。请注意,您需要具有管理员权限才能运行此命令。安装完成后,您可以在应用程序菜单中找到Notepad并开始使用它。 请记住,Notepad是Windows和Mac OS系统上的一个简单但功能强大的代码编辑器,而Ubuntu上的Notepad-plus-plus是为类Unix操作系统提供的兼容版本。如果您对Notepad-plus-plus在Linux上的功能有任何疑问,您可以参考引用中提到的另一个名为Notepadqq的替代编辑器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Ubuntu 安装 notepad++ 以及 解决中文字体乱码显示 以及 字体倒了的问题](https://blog.csdn.net/jisuanji198509/article/details/118706780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [如何在Ubuntu 20.04安装NotePad++](https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/117193524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值