在 Python 3 中通过 selenium 打开和关闭 Firefox 选项卡并切换焦点

问题描述 投票:0回答:1

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

浏览器将显示一个非常占用 RAM 的 Grafana 仪表板(

Facebook
google
url 只是此处的示例)。为了让我的 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()
python python-3.x selenium selenium-webdriver
1个回答
2
投票

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

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)
© www.soinside.com 2019 - 2024. All rights reserved.