python - 在 Python 3 中通过 selenium 打开和关闭 Firefox 选项卡并切换焦点
问题描述
我正在寻找一个 Python 3 脚本,它可以打开和关闭 Firefox 选项卡并切换它们的焦点。我正在使用带有最新 Raspbian 的 Raspberry Pi 4。
浏览器将显示一个非常需要 RAM 的 Grafana 仪表板(此处的Facebook
和google
url 只是一个示例)。为了让我的 Raspberry 保持活力,我必须大约每小时清理一次 RAM。唯一合适的解决方案似乎是关闭带有 Grafana 仪表板的 Firefox 选项卡,然后再次打开它。
为了尽可能快地做到这一点,我不想重新启动整个浏览器,但我只想关闭旧任务并打开一个新任务。这似乎有效。但我的问题是创建标签后我无法在标签之间切换。所以当我创建一个新标签时,焦点会立即切换到新标签。因此,用户可以看到新的仪表板加载。如果新选项卡在后台加载并在完成加载后生效,那就更好了。
过程应该是这样的:
- 用一个标签打开 Firefox
- 在达到临界 RAM 使用率之前什么都不做
- 创建一个新的 Firefox 标签页
- 立即将焦点从新标签切换到旧标签
- 等待几秒钟,直到新标签页加载完毕
- 将焦点切换到新选项卡
- 关闭旧标签
^^回到第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()
解决方案
要切换到最近打开的最后一个选项卡,您可以使用以下命令:
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)
推荐阅读
- python - 使用包含数据文件的模块时使用 pyinstaller 编译可执行文件
- java - 启动 FXML 文件和服务器 [Javafx]
- paypal - PayPal 智能按钮(订阅) update_client_config_error
- reactjs - 如何使用文本框上的句柄更改事件来更新反应数组状态?
- python-3.x - Python elif 语法无效
- java - 即使时间已经过去,Android 通知也会显示
- r - R 中的堆叠条 - 反转大小和/或百分比标签
- kotlin - Kotlin:如果没有人在阅读,则在 redezvous Channel 上发送不会暂停
- python - 烧瓶如何在使用 @app.errorhandler(Exception) 时不显示错误页面但继续应用程序流程
- algorithm - 硬币找零问题中递归关系背后的原因是什么?