Skip to content

Docker运行示例

Naibo Wang edited this page Apr 24, 2024 · 28 revisions

简单示例

  1. 确保已安装Docker。
  2. 运行selenium chrome镜像:
sudo docker run -d -p 4444:4444 --name selenium-chrome --shm-size="4g" selenium/standalone-chrome
  1. 运行任务:

A 如不需要自己编译程序,则直接运行打包好的程序(需下载_with_docker_support版本)即可:

./EasySpider/resources/app/chrome_linux64/easyspider_executestage --ids [0] --docker_driver http://localhost:4444/wd/hub --user_data 0 --server_address http://localhost:8074 --config_folder "./" --headless 1 --read_type local --config_file_name config.json --saved_file_name

B 如果需要自己修改源代码并运行程序,则执行下面的命令:

切换的本项目源码的ExecuteStage文件夹,安装Python环境(Python版本需要为3.10或3.11):

pip3 install -r requirements.txt

然后执行任务:

python3 easyspider_executestage.py --ids [0] --docker_driver http://localhost:4444/wd/hub --user_data 0 --server_address http://localhost:8074 --config_folder "./" --headless 1 --read_type local --config_file_name config.json --saved_file_name

自行配置环境并运行程序的情况下,如提示Cannot find file ../ElectronJS/chrome_win64/stealth.min.js的情况下,就在../ElectronJS文件夹下手动建立一个chrome_win64文件夹,再把ElectronJS文件夹下的stealth.min.js文件复制到chrome_win64文件夹下即可,如果遇到其他同类错误则执行一样的操作。

命令行参数说明在此文档中:https://github.com/NaiboWang/EasySpider/wiki/Argument-Instruction

以上为local模式示例,在--docker_driver后面写远程docker的网址,默认是http://localhost:4444/wd/hub--read_type local则需要从本地的ExecuteStage/execution_instances文件夹里读取0.json文件,否则--read_type remote的情况下会从--server_address http://localhost:8074的服务器中读取任务信息。

一定要等到任务执行完成并自行退出,否则将会出现docker容器中的浏览器被占用而无法被其他任务使用的情况!!!如果碰到这种情况,请看下面的解决方案。

  1. 访问http://localhost:4444来查看浏览器占用情况,一个浏览器只能被一个任务使用,如果意外退出程序但浏览器仍正被占用,导致无法被其他任务使用(命令行输出卡在Using remote driverHeadless mode)时,请重启docker镜像重置浏览器:
sudo docker restart selenium-chrome

只有下图为0%时才可执行其他任务:

image

扩展:同时运行多个任务

以上示例是同时只运行一个浏览器docker实例的情况,如需要同时运行多个浏览器示例以便多个任务同时执行,可以使用下面的解决方案:

  1. 启动Selenium Hub,Selenium Hub作为中央节点,管理各个Selenium Node。使用下面的命令启动Hub:
sudo docker network create grid
sudo docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub
  1. 启动Selenium Nodes

接下来,连接Chrome节点到Hub。可以根据需要启动任意数量的节点,下面是启动三个浏览器实例的命令:

sudo docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
    --shm-size="4g" \
    -e SE_EVENT_BUS_PUBLISH_PORT=4442 \
    -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
    selenium/node-chrome
sudo docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
    --shm-size="4g" \
    -e SE_EVENT_BUS_PUBLISH_PORT=4442 \
    -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
    selenium/node-chrome
sudo docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
    --shm-size="4g" \
    -e SE_EVENT_BUS_PUBLISH_PORT=4442 \
    -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
    selenium/node-chrome

如果你需要更多的浏览器实例,可以重复上面的命令。

  1. 其余命令执行方式不变,仍然在--docker_driver后面写远程docker的网址,默认是http://localhost:4444/wd/hub

  2. 访问http://localhost:4444来查看浏览器占用情况,理论上应该有三个实例并显示占用情况:

image