注:我已经搜索了many个帖子,有些甚至问了同样的问题,但我找不到任何答案

如何获取当前可见/活动的选项卡? 我能找到的最接近的是

driver.executeScript("return document.visibilityState")

但循环和切换窗口将导致始终打印visible.

driver.getWindowHandle()driver.getCurrentUrl()都返回不同的(随机?)选项卡,而不是用户打开的选项卡.

主要目标:

  1. 用户打开浏览器
  2. 用户正常打开多个标签和浏览
  3. 用户启动我的应用程序(使用远程调试端口连接到浏览器)
  4. 该应用程序能够检测用户当前正在浏览哪个选项卡(此步骤不起作用!)

这个是可能的吗?

Or,有没有除了selenium之外的其他替代品可以实现同样的目标?最好是用Java或Kotlin,但我想我可能不得不学习如何制作浏览器扩展……(但试图在不延期的情况下看看是否有可能)

推荐答案

注:使用Microsoft Edge进行了测试

我决定不使用Selify,而是向http://localhost:9222/json.发送了一个GETRequest 在只将列表过滤到类型为page的选项卡中之后,我 for each 选项卡连接了一个WebSocket到ws://127.0.0.1:9222/devtools/page/TAB_ID(用上面的GET请求中的id替换TAB_ID). 然后,这允许您使用Runtime.evaluate方法(该JSON应该通过WebSocket连接发送)在每个选项卡上运行JavaScript(即使它没有显示!):

{
    "id": 1,
    "method": "Runtime.evaluate",
    "params": {
        "expression": "!document.hidden"
    }
}

它将返回如下结果:

{
    "id": 1,
    "result": {
        "result": {
            "type": "boolean",
            "value": false
        }
    }
}

如果为false,则表示该选项卡处于隐藏状态;如果为true,则表示该选项卡已显示.

不过,请注意,这只检测选项卡是shown还是hidden,因此如果打开了两个都显示的浏览器窗口(例如,如果它们相邻),则两个窗口都将返回true.

Java相关问答推荐

将Nimbus设置为计算机上运行的所有Java应用程序的默认外观

为什么我要创建一个单独的互斥体/锁对象?

如何获得执行人?

如何在运行时动态创建表(使用Java、JPA、SprringBoot)

当涉及到泛型时,类型推理在Java中是如何工作的?

Bean定义不是从Spring ApplationConext.xml文件加载的

Java流传输一个列表并创建单个对象

Spring @Value default无法计算表达式

搜索列表返回多个频道

没有使用Lombok生成的参数

EXCEL中的公式单元格显示#NAME?

如何使这两种方法合二为一?

Maven-Dependency-Plugin 3.6.+开始查找在依赖关系:分析目标期间找到的新的使用的未声明依赖关系

JPA无手术同品种器械可能吗?

在具有Quarkus Panache的PostgreSQL中将JSON数据存储为JSONB时,会将其存储为转义字符串

Java CDI:@Singleton@Startup@Inject无法实现接口

Java 21内置http客户端固定运营商线程

如何在Selenium上继续使用最新的WebDriver版本

在数组中查找素数时出现逻辑错误

如何在更改分辨率时将鼠标坐标计算为世界坐标