使用docker部署基于selenium和chrome-headless的爬虫

无论是测试还是爬虫的一些工作,有时候都会用到selenium去对chrome执行自动化操作,这里介绍一下如何使用docker快捷方便的部署相关应用。

1. selenium+chrome镜像

通过docker search selenium我们发现,有一个docker镜像叫做selenium/standalone-chrome
看名字应该是包含了selenium和chrome,按照之前的方式我们是在本机上直接调用webdriver控制chrome,而在虚拟机上我们可以使用远程调用
先翻一下官方文档,发现有两种启动方式:

$ docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:3.141.59-dubnium
#OR
$ docker run -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome:3.141.59-dubnium

这里看到镜像名称后面有标签,如果pull的是latest版本的话那么可以忽略。

2. 启动selenium+chrome服务

现在我们测试启动selenium+chrome服务。
执行下面的语句启动容器:

docker run -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome

这里容器暴露了一个4444端口用于连接,使用一下python代码(命名为spider.py)连接selenium服务,生成webdriver:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver = webdriver.Remote(
    command_executor="http://127.0.0.1:4444/wd/hub",
    desired_capabilities=DesiredCapabilities.CHROME
)

driver.get("http://www.baidu.com")
print(driver.title)
driver.close()

执行前要确保python3环境中安装了selenium

pip install selenium

然后执行代码,返回以下结果说明访问容器成功:

百度一下,你就知道

3. 使用python镜像

现在我们还在本机上执行python代码,有时候也足够了,如果想要在docker上一键部署python+selenium+chrome的话,请继续往下面看。
先pull一个alpine3.6版本的python镜像:

docker pull python:alpine3.6

然后根据我们的需求,定制一下这个python镜像,这里我们在里面安装好selenium就行了,所以编写如下的Dockerfile:

FROM python:alpine3.6
RUN pip install selenium

构建名为selenium_python的新镜像:

docker build . -t selenium_python:v1

4. 编写docker-compose文件

要同时部署python脚本和selenium-chrome,docker-compose当然是首选。
docker-compose并非docker的自带工具,因此执行如下命令安装:

sudo apt-get install docker-compose

根据需求编写docker-compose文件:

version: "2.0"
services:
  spider:
    image: selenium_python:v1
    volumes:
      - ./spider.py:/code/spider.py  # 这里把刚刚的代码映射到这个目录
    command: python /code/spider.py  # 定义启动容器执行的命令
    depends_on:
      - chrome
  chrome:
    image: selenium/standalone-chrome:latest
    ports:
      - "4444:4444"
    shm_size: 2g

先别急着启动,这里注意两个问题:

  1. 这里selenium容器的hostname是chrome,所以要修改command_executor="http://127.0.0.1:4444/wd/hub"中的IP地址,修改后为command_executor="http://chrome:4444/wd/hub"
  2. 注意chrome启动要一定的时间,所以在代码最前面加上几秒钟延时(也可以使用相关手段检测chrome完全启动,可以自行谷歌)
    修改后的代码为:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

time.sleep(5)
driver = webdriver.Remote(
    command_executor="http://chrome:4444/wd/hub",
    desired_capabilities=DesiredCapabilities.CHROME
)
driver.get("http://www.baidu.com")
print(driver.title)
driver.close()

然后使用docker-compose启动服务:

docker-compose up -d

如果不报错,在docker logs seleniumchrome_spider_1显示的日志中,同样可以看到:

百度一下,你就知道
  • 11
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
Docker部署Python Selenium可以通过编写docker-compose.yml文件来实现。首先,在docker-compose.yml文件中定义两个服务:pythonchrome。在Python服务中,我们可以指定容器的构建方式、挂载的目录以及启动容器时执行的命令。而在Chrome服务中,我们可以指定使用的镜像、端口映射以及共享内存的大小。,其中包括Docker的安装与运行环境检测、Python调用容器实例跑自动化查天气实例演示等内容。 希望这些信息能对你有帮助!如果还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python+Selenium浏览器自动化的Docker部署](https://blog.csdn.net/bingo199/article/details/103615277)[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%"] - *3* [Docker selenium自动化 - 使用python操作dockerpython运行、启用、停用和查询容器实例演示](https://blog.csdn.net/qq_38161040/article/details/121654190)[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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值