Docker Selenium(1) 搭建服務及chrome 使用 firefox_selenium/standalone-firefox-程序员宅基地

技术标签: python  

Docker Selenium能讓Selenium在Docker中運行,可加速建置時間及獨立出各瀏覽器的版本
,保持了一定的隔離性,是非常好的測試環境。

docker-selenium 官方文檔

https://www.lfhacks.com/tech/selenium-docker

https://hub.docker.com/r/selenium/standalone-chrome/dockerfile

鏡像介紹

selenium/hub: Grid Hub,相當於一個空白的Seleniun Server,
selenium/node-chrome: Chrome節點,需加入Grid Hub才能使用。
selenium/node-firefox: Firefox節點,需加入Grid Hub才能使用。
selenium/node-chrome-debug: Chrome節點,同時包含VNC Server,需加入Grid Hub才能使用。
selenium/node-firefox-debug: Firefox節點,同時包含VNC Server,需加入Grid Hub才能使用

selenium/standalone-chrome: 包含Chrome的Seleniun Server,可直接調用。
selenium/standalone-firefox: 包含Chrome的Seleniun Server,可直接調用。
selenium/standalone-chrome-debug: 包含Chrome的Seleniun Server,同時包含VNC Server,可直接調用。
selenium/standalone-firefox-debug: 包含Chrome的Seleniun Server,同時包含VNC Server,可直接調用。

使用

docker conpose方法

selenium 官方提供了docker compose方法,直接使用就可以輕鬆搭建了。

官方連結

  1. docker-compose.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# To execute this docker-compose yml file use docker-compose -f <file_name> up
# Add the "-d" flag at the end for deattached execution
version: "3"
services:
  selenium-hub:
    image: selenium/hub:3.12.0-boron
    container_name: selenium-hub
    ports:
      - "4448:4444"
  chrome:
    image: selenium/node-chrome:3.12.0-boron
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
  firefox:
    image: selenium/node-firefox:3.12.0-boron
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
  1. docker-compose up --build

 

  1. 搭建成功

docker-compose.yaml中我指定公開的是4448端口,打開頁面看到可以成功訪問,能調用的瀏覽器有Chrome及Firefox.

 

Python 調用

調用方法與本地搭建selenium server相同,以下以chrome為例。

  1. 創建一個Chrome對象
1
2
3
4
5
6
7
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

browser = webdriver.Remote(
    command_executor='http://192.168.8.22:4448/wd/hub',
    desired_capabilities=DesiredCapabilities.CHROME,
)

如果成功調用,在slenium頁面也會看到一個chrome正在被使用。

 

  1. 進入Google首頁,試著打印網頁標題
1
2
3
browser.get('http://www.google.com')
print(browser.title)
# Google
  1. 測試截取當前頁面
1
browser.save_screenshot("chrome.png")

 

  1. 釋放瀏覽器
1
browser.quit()

結束調用,slenium頁面上的chrome已經變回彩色的。

 

另外一種模式 : Debug Mode

Docker Selenium 還有一種 Debug Mode,主要提供了有畫面的selenium,能直接看到瀏覽器在做什麼,Debug Mode使用了VNC服務器並佔用了5900端口,但要注意的是每個端口只能運行一個節點(Chrome、Firefox等),如果希望包含兩個節點或更多,那麼就必須公開不同的端口,如5900:5900、5901:5900…

Docker Compose 方法:

  1. docker-compose up --build
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# To execute this docker-compose yml file use docker-compose -f <file_name> up
# Add the "-d" flag at the end for deattached execution
version: '2'
services:
  firefox:
    image: selenium/node-firefox-debug:3.12.0-boron
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - hub
    environment:
      HUB_HOST: hub
    ports:
      - "5900:5900"

  chrome:
    image: selenium/node-chrome-debug:3.12.0-boron
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - hub
    environment:
      HUB_HOST: hub
    ports:
      - "5901:5900"

  hub:
    image: selenium/hub:3.12.0-boron
    ports:
      - "4450:4444"
  1. 訪問selenium頁面

這個頁面顯示了Selenium hub的狀態,如果想看到VNC的情況,需要進入Docker 容器才看的到。

 

用VNC 看瀏覽器在做什麼

  1. 安裝VNC軟體

推薦工具 免費VNC : ultravnc

ultravnc下載地址

  1. 打開UltraVNC Viewer

 

下載並安裝完成後,連進Docker內的VNC Server

  1. 點擊連接

 

  1. 輸入密碼

 

默認密碼 : secret

預設是有密碼的,若不希望輸入密碼可在容器變量中加入VNC_NO_PASSWORD: 1

  1. 連接成功

看到這個畫面代表成功連進了VNC

 

Python 調用

  1. 創建一個腳本,測試selnium運行的情況。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.common.keys import Keys

browser = webdriver.Remote(
    command_executor='http://192.168.8.22:4450/wd/hub',
    desired_capabilities=DesiredCapabilities.CHROME,
)

browser.get("http://www.google.com")
browser.find_element_by_id("lst-ib").send_keys("python")
browser.find_element_by_name("btnK").send_keys(Keys.ENTER)
titles = browser.find_elements_by_xpath(".//h3[@class='r']//a")
print([i.text for i in titles])
browser.quit()
  1. 有畫面的selenium出現了

 

小結

docker selenium透過Docker建置的關係,構建非常方便快速,這邊主要介紹了兩種模式創建容器,一種是可以看見瀏覽器的,一種是默默執行的,測試運行速度也非常的快,感覺起來似乎比實體主機還要順上很多,但以長期的測試情況,就不知道會不會有其他問題了。

 

https://maliaotw.github.io/2018/06/08/Docker%20Selenium(1)%20%E6%90%AD%E5%BB%BA/

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

https://www.jianshu.com/u/a70a89d3258f

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sirobot/article/details/106851654

智能推荐

微信 及支付宝 支付接口 功能_在线电商平台 支付宝 微信支付 合利宝接口-程序员宅基地

文章浏览阅读5.3k次,点赞3次,收藏12次。1:首页需要了解支付宝跟微信的开发文档,这里就贴上文档网址,不做过多描述微信:https://pay.weixin.qq.com/wiki/doc/api/index.html支付宝:https://open.alipay.com/developmentDocument.htm2:业务流程 首先不管是支付宝还是微信,在对应不同的场景支付的时候都会有不同的接口,这里需要注意,..._在线电商平台 支付宝 微信支付 合利宝接口

Couldn‘t open file /etc/pki/rpm-gpg/RPM-GPG-KEY-7_couldn't open file /etc/pki/rpm-gpg/rpm-gpg-key-7-程序员宅基地

文章浏览阅读2.3k次。今天在CentOS7中使用yum命令的时候提示Couldn’t open file /etc/pki/rpm-gpg/RPM-GPG-KEY-7。GPG在Linux上的应用主要是实现官方发布的包的签名机制。GPG分为公钥及私钥。公钥:顾名思意,即可共享的密钥,主要用于验证私钥加密的数据及签名要发送给私钥方的数据。私钥:由本地保留的密钥,用于签名本地数据及验证用公钥签名的数据。实现原理(以Red Hat签名为例):1>RH在发布其官方的RPM包时(如本地RHEL光盘及FTP空间包),会提供一_couldn't open file /etc/pki/rpm-gpg/rpm-gpg-key-7

mui app 显示手机任务栏_mui 后台显示通知栏-程序员宅基地

文章浏览阅读276次。manifest.json plus里加上"statusbar" : { "immersed" : true, "background" : "#D74B28" },同时基础配置里是否应用全屏不进行勾选..._mui 后台显示通知栏

Appium基础篇6-抓元素工具之Android Device Monitor_android中使用monitor抓布局-程序员宅基地

文章浏览阅读401次。 上一篇,我们介绍了如何使用UI Automator Viewer这个工具来获取安卓上app的页面元素的信息。除了UI Automator Viewer之外,其实Android SDK下还有一个工具支持来抓取元素的属性,这个工具叫Android Device Monitor,简称DDMS,也在tools文件夹下。1.进入SDK安装目录2.点击Monitor.bat点击后,默认页面如下图。3...._android中使用monitor抓布局

GitHub开源项目之“线程池”_thread-pool-c github-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏5次。Table of ContentsA simple C thread pool implementationPossible enhancements原理代码threadpool.hthreadpool.c测试例:heavy.cshutdown.cthrdtest.cA simple C thread pool implementationCurre..._thread-pool-c github

MCPD认证 Web开发者认证考试科目及升级-程序员宅基地

文章浏览阅读120次。MCPD认证 Web开发者简称:MCPD: webdev全称:MCPD: Web DeveloperMCPD:webdev认证考试科目 (1门+2门MCTS考试) 认证考试 培训课程 参考资料 70–547: P..._asp.net and/or mcpd: web developer

随便推点

uni-app 系统状态栏高度CSS变量--status-bar-height-程序员宅基地

文章浏览阅读1.1k次。【代码】uni-app 系统状态栏高度CSS变量--status-bar-height。_--status-bar-height

【日积月累】SpringBoot 通过注解@CacheConfig @Cacheable @CacheEvict @CachePut @Caching使用缓存-程序员宅基地

文章浏览阅读1k次。Spring在3.1版本,就提供了一条基于注解的缓存策略,实际使用起来还是很丝滑的,本文将针对几个常用的注解进行简单的介绍说明,有需要的小伙伴可以尝试一下@CacheConfig:常用于类级别的注解,用于统一配置类缓存的公共属性@Caching:可以在一个类或方法同时使用多个缓存相关注解,灵活配置缓存策略@Cacheable:用于标记一个类或方法,当被标记对象被访问,会先去缓存中查询相应的结果,如果存在则返回,不存在则指向方法@CacheEvict :用于从缓存中移除数据。_@cacheconfig

javamail 给多人发送邮件_javax.mai邮件群发-程序员宅基地

文章浏览阅读1.9w次,点赞2次,收藏14次。之前测试mail这个功能的时候,简单的作出了发送email的功能,但是仅仅发给一个人可以,发送多个联系人就会出错,发送失败!请与邮件管理员联系。 javax.mail.internet.AddressException: Illegal whitespace_javax.mai邮件群发

软考高项:项目进度管理模拟试题_某项目包含a、b、c、d、e、f、g七个活动,各活动的历时估算和活动间的逻辑关系如下-程序员宅基地

文章浏览阅读3.8k次。活动D和活动F只能在活动C结束后开始.活动A和活动B可以在活动C开始后的任何时间内开始,但是必须在项目结束前完成.活动E只能在活动D完成后开始.活动B是在活动C开始1天后才开始的.在活动B的过程中,发生了一件意外事件,导致活动B延期2天.为了确保项目按时完成,______.40.完成某信息系统集成项目中的一个最基本的工作单元A所需的时间,乐观的估计需8天,悲观的估计需38天,最可能的估计需20天,按照PERT方法进行估算,项目的工期应该为______,在26天以后完成的概率大致为______._某项目包含a、b、c、d、e、f、g七个活动,各活动的历时估算和活动间的逻辑关系如下

web集群学习:nginx+keepalived实现负载均衡高可用性-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏2次。​在Keepalived+ Nginx 高可用负载均衡架构中,keepalived 负责实现高可用。它是一个高性能的服务器高可用或者热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现Web服务器端的高可用。使用keepalived可以保证nginx的高可用,他能监控nginx的健康状态,当nginx出现宕机时自动主备切换。​_nginx+keepalived实现负载均衡

Java学习【类加载器ClassLoader】_java classloader 加载类-程序员宅基地

文章浏览阅读344次,点赞3次,收藏4次。跟着大佬们的文章学习,这次再深入学习一下类加载器文章目录一、简介:二、类文件的编译过程三、类加载器引导类加载器(BootstrapClassLoader)扩展类加载器(ExtensionsClassLoader)应用类加载器/系统类加载器(AppClassLoader)自定义类加载器(UserDefineClassLoader)四、双亲委派机制五、双亲委派机制的好处六、CLassLoader类核心方法6.1:`loadClass(String)`——加载指定的Java类6.2:`findClass(Str_java classloader 加载类