EasySpider Docker运行示例
在日常开发或测试中,自动化浏览器的操作已经变得越来越重要。而通过Docker来运行Selenium Chrome镜像,可以轻松实现自动化浏览器测试,同时支持多任务并行处理。今天我们来看看如何使用Docker来启动Selenium Chrome镜像并运行任务。
前提条件
首先,你需要确保已经安装了Docker。如果还没有安装,可以根据Docker官方指南进行安装。安装完成后,我们就可以进入Selenium Chrome镜像的操作了。
启动Selenium Chrome镜像
运行以下命令来启动一个Selenium Chrome镜像,并且将容器端口映射到主机的4444端口:
bash
sudo docker run -d -p 4444:4444 --name selenium-chrome --shm-size="4g" selenium/standalone-chrome
此命令会启动一个独立的Chrome实例,我们可以通过Docker容器中的Chrome浏览器来执行自动化任务。
运行任务的两种方式
A. 直接运行打包好的程序
如果你不打算自己编译程序,可以直接运行打包好的程序。下载包含Docker支持的程序版本,执行以下命令:
bash
./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环境(版本为3.10或3.11)。使用以下命令安装依赖:
bashpip3 install -r requirements.txt
然后执行任务:
bash
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
的错误,只需手动创建文件夹并将相应文件复制到指定目录下即可。
其他类似文件找不到的问题也可以通过同样的方式解决,确保文件路径正确无误。
查看浏览器占用情况
任务执行时,一个浏览器实例只能同时处理一个任务。为了查看当前浏览器的占用情况,你可以访问http://localhost:4444来查看。如果出现浏览器被占用无法执行任务的情况,重启Docker镜像即可:
bashsudo docker restart selenium-chrome
同时运行多个任务
如果你需要同时运行多个浏览器实例以便处理多个任务,可以使用Selenium Hub和Node。Selenium Hub作为中央节点,管理多个Selenium Node。下面是具体步骤:
1. 启动Selenium Hub
bashsudo docker network create grid sudo docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub
2. 启动Selenium Nodes
接下来,通过以下命令连接多个Chrome节点到Selenium Hub。可以根据需要启动多个节点,例如启动三个浏览器实例:
bash
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
3. 任务执行
其余命令执行方式与之前相同,仍然在--docker_driver
后指定远程Docker地址,默认是http://localhost:4444/wd/hub
。
你可以访问http://localhost:4444查看各个浏览器实例的占用情况。
这个Docker运行Selenium的方案真心推荐给那些需要同时运行多个任务的小伙伴们,特别是那些需要自动化浏览器操作的开发者和测试人员。有了Selenium Hub和多个Node的支持,你可以轻松实现多任务并行执行,极大提高效率。