首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制停靠容器中的SeleniumHQ关闭所有浏览器会话

强制停靠容器中的SeleniumHQ关闭所有浏览器会话
EN

Stack Overflow用户
提问于 2019-02-08 16:58:36
回答 1查看 581关注 0票数 1

我在docker容器中运行selenium hub来测试网站。我的Dockerfile的相关部分是:

代码语言:javascript
复制
#https://github.com/SeleniumHQ/docker-selenium
version: '3'
services:
selenium-hub:
    image: selenium/hub:3.141.59-dubnium
    environment:
    - GRID_MAX_SESSION=15
    - GRID_TIMEOUT=180000
    - GRID_BROWSER_TIMEOUT=180000      
    networks: 
    - selenium-hub
chrome:
    image: selenium/node-chrome:3.141.59-dubnium
    shm_size: 512MB
    volumes:
    - /dev/shm:/dev/shm
    depends_on:
    - selenium-hub
    environment:
    - NODE_MAX_INSTANCES=5
    - NODE_MAX_SESSION=6
    - HUB_HOST=selenium-hub
    - HUB_PORT=4444
    - DBUS_SESSION_BUS_ADDRESS=/dev/null
    networks: 
    - selenium-hub

我编写python3.x脚本来连接selenium。通常的例程如下。但有时driver变量会因为外部错误而丢失。在这种情况下,selenium网格包含挂起的浏览器会话,我已经无法控制这些会话。是否可以强制Selenium hub一次关闭所有浏览器会话?如何在python中执行此操作

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

cap = DesiredCapabilities.CHROME
driver = webdriver.Remote(command_executor='http://selenium-hub:4444/wd/hub',desired_capabilities=cap) 
##
# commands to browser
##
driver.quit()
EN

回答 1

Stack Overflow用户

发布于 2019-02-09 09:17:56

你可以使用try/finally来组织你的代码:

代码语言:javascript
复制
driver = webdriver.Remote(command_executor='http://selenium-hub:4444/wd/hub', desired_capabilities=cap)
try:
    ##
    # commands to browser
    ##
finally:
    driver.quit()

或者将您的驱动程序创建为上下文管理器:

代码语言:javascript
复制
with webdriver.Remote(command_executor='http://selenium-hub:4444/wd/hub', desired_capabilities=cap) as driver:
    ##
    # commands to browser
    ##

..。这两个函数将始终在您的驱动程序实例上调用quit()

注意:尽管这些函数会无条件地调用quit(),但这并不意味着浏览器真的会关闭。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54588879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档