首页 > 解决方案 > 在 Python 3 中通过 selenium 打开和关闭 Firefox 选项卡并切换焦点

问题描述

我正在寻找一个 Python 3 脚本,它可以打开和关闭 Firefox 选项卡并切换它们的焦点。我正在使用带有最新 Raspbian 的 Raspberry Pi 4。

浏览器将显示一个非常需要 RAM 的 Grafana 仪表板(此处的Facebookgoogleurl 只是一个示例)。为了让我的 Raspberry 保持活力,我必须大约每小时清理一次 RAM。唯一合适的解决方案似乎是关闭带有 Grafana 仪表板的 Firefox 选项卡,然后再次打开它。

为了尽可能快地做到这一点,我不想重新启动整个浏览器,但我只想关闭旧任务并打开一个新任务。这似乎有效。但我的问题是创建标签后我无法在标签之间切换。所以当我创建一个新标签时,焦点会立即切换到新标签。因此,用户可以看到新的仪表板加载。如果新选项卡在后台加载并在完成加载后生效,那就更好了。

过程应该是这样的:

  1. 用一个标签打开 Firefox
  2. 在达到临界 RAM 使用率之前什么都不做
  3. 创建一个新的 Firefox 标签页
  4. 立即将焦点从新标签切换到旧标签
  5. 等待几秒钟,直到新标签页加载完毕
  6. 将焦点切换到新选项卡
  7. 关闭旧标签

^^回到第2点^^

Python.ph

#!/usr/bin/env python
import time
import psutil
from selenium import webdriver

dr = webdriver.Firefox()

## (1)
dr.get('http://google.com‘)

while True:
    time.sleep(10)

    psutil.virtual_memory()
    dict(psutil.virtual_memory()._asdict())
    ram = psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
    
    ## (2)
    if ram <= 50:
        ## (3)
        dr.execute_script("$(window.open('http://facebook.com‘))“)
        
        ## (4)
        # HOW TO SWITCH FOCUS TO THE: Older tab?

        ## (5)
        # Wait until the new tab is loaded
        time.sleep(5)
    
        ## (6)
        # HOW TO SWITCH THE FOCUS TO THE: Newer tab?
        
        ## (7)
        # Close the older tab
        dr.close()

标签: pythonpython-3.xseleniumselenium-webdriver

解决方案


要切换到最近打开的最后一个选项卡,您可以使用以下命令:

last_window = driver.window_handles[-1]
driver.switch_to_window(last_window)

同样,要切换到第一个窗口,您可以使用以下命令:

first_window = driver.window_handles[0]
driver.switch_to_window(first_window)

一般来说,如果你有n打开的标签,你可以切换到n-th标签

nth_window = driver.window_handles[n-1]
driver.switch_to_window(nth_window)

推荐阅读