首页 > 其他分享 >使用docker部署基于selenium和chrome-headless的爬虫

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

时间:2024-04-11 09:33:06浏览次数:30  
标签:chrome selenium python headless 4444 docker Copy

使用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
Copy

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

2. 启动selenium+chrome服务

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

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

这里容器暴露了一个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()
Copy

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

pip install selenium
Copy

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

百度一下,你就知道
Copy

3. 使用python镜像

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

docker pull python:alpine3.6
Copy

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

FROM python:alpine3.6
RUN pip install selenium
Copy

构建名为selenium_python的新镜像:

docker build . -t selenium_python:v1
Copy

4. 编写docker-compose文件

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

sudo apt-get install docker-compose
Copy

根据需求编写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
Copy

先别急着启动,这里注意两个问题: 这里selenium容器的hostname是chrome,所以要修改command_executor="http://127.0.0.1:4444/wd/hub"中的IP地址,修改后为command_executor="http://chrome:4444/wd/hub"
注意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()
Copy

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

docker-compose up -d
Copy

如果不报错,在docker logs seleniumchrome_spider_1显示的日志中,同样可以看到: 百度一下,你就知道:

百度一下,你就知道
Copy

转载:https://blog.csdn.net/weixin_39198406/article/details/85085505

 

标签:chrome,selenium,python,headless,4444,docker,Copy
From: https://www.cnblogs.com/xiao-xue-di/p/18128043

相关文章

  • selenium-浏览器复用-Invalid Status code=403 text=Forbidden
    问题:selenium-java版本为4.1.4、4.8.2+Java8运行时报InvalidStatuscode=403text=Forbidden 运行代码:publicclassRemoteTest{publicChromeOptionsoptions;publicWebDriverdriver;@TestpublicvoidremoteTest(){options=newC......
  • 使用Python+selenium+pytest+allure 编写ui自动化
    一、1.1背景:每次新发布功能后都需要手动跑冒烟用例,重复点击太多,消耗人力资源1.2测试项目:飞书第三方isv应用1.3技术栈:Python+Selenium+Pytest+Allure1.4框架设计:使用PageObject设计模式,将页面的元素和元素之间的操作方法进行分离。它有三层架构,分别为:基础封装层BasePage,PO页面......
  • Ubuntu下安装谷歌Chrome浏览器
    步骤1:下载Chrome谷歌浏览器,下方的指令会将Chrome安装包下载到当前目录wgethttps://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb下载完成后,安装包就存在于当前目录了,如下图:步骤2:使用管理员权限安装Chromesudoaptinstall./google-chrome-sta......
  • 想请教一下,selenium可以做到点击这个继续嘛?
    大家好,我是Python进阶者。一、前言前几天在Python钻石交流群【盼头】问了一selenium的问题,问题如下:想请教一下,selenium可以做到点击这个继续嘛?二、实现过程这里【此类生物】给了一个解答:可以,switchtoalert。顺利地解决了粉丝的问题。如果你也有类似这种Python相关的小问......
  • SeleniumBase 录制模式-使用笔记(二)
    自动化福音(爬虫、办公、测试等)SeleniumBase使用笔记(二)SeleniumBase录制模式SeleniumBase提供录制模式,可以直接录制操作,并生成脚本。目录启用录制录制功能操作结束录制启用录制直接命令启用#new_recording.py=输出文件名#URL:路径sbasemkrecnew_recordi......
  • RuntimeError: requested profile "F:\code\chromium_git\chromium\src\chrome\
    RuntimeError:requestedprofile"F:\code\chromium_git\chromium\src\chrome\build\pgo_profiles\chrome-win64-5481-1675874756-509946de85f2a6f58f14f39a5e26a0ae82afaec0.profdata"doesn'texist,pleasemakesure"checkout_pgo_profiles......
  • Chrome浏览器前端开发调试时强制更新js、css静态资源文件缓存的方法
    以Chrome浏览器为例,国产浏览器未做全面测试。前端开发静态文件时,浏览器访问会缓存样式、图片、js等,怎么快速更新缓存。以下方法特别适合只想清除某个网页的缓存,而不想清除全部浏览器缓存可以采用以下方法。一、强制刷新同时按住ctrl+f5或ctrl+shift+r进行访问页面强制刷新,一般......
  • Selenium框架
    Selenium框架Selenium是一个自动化测试工具,用于模拟用户在Web应用程序上的操作。它提供了多种编程语言的接口,如Python、Java等,使测试人员能够编写自动化测试脚本。Selenium可以模拟用户在不同浏览器上的操作,包括点击、输入文本等,以验证Web应用程序的功能和性能。它还支持分布式......
  • How to change Google Chrome DevTools codes highlight theme color All In One
    HowtochangeGoogleChromeDevToolscodeshighlightthemecolorAllInOne如何更改GoogleChromeDevTools代码高亮主题颜色demosLightPink(......
  • selenium使用
    为了解决requests无法直接执行JavaScript代码的问题 安装pip3installselenium  #浏览器驱动:http://npm.taobao.org/mirrors/chromedriver/#驱动要跟浏览器版本对应84.0.4147.105:驱动用84.0.4147.30/#下载完解压就是个exe(不同平台的可执行文件)#fromseleni......