首页 > 解决方案 > 是否可以使用 webdriver/Selenium 来获取用户实际查看的当前选项卡

问题描述

我正在尝试使用 Selenium 来检查/监视用户使用的选项卡。但我发现驱动程序总是只监视浏览器打开后的第一个选项卡。

我试着用这个

driver.current_window_handle

它显示了窗口名称,但并不完全是用户实际使用的选项卡。除非我这样做,否则它始终是第一个选项卡 driver.swith_to_window 另外,我尝试使用

handles = driver.window_handles

然后对句柄中的每个句柄执行此操作

driver.swith_to_window(handle)

但这会中断用户的操作,因为浏览器会一一切换标签页。

是否可以通过 webdriver 或 selenium 获取当前选项卡用户实际查看的窗口句柄、标题或索引?

场景:

  1. python打开浏览器
  2. 用户打开选项卡 1、选项卡 2、选项卡 3 并访问网站
  3. 用户视图 tab2
  4. selenium 从 tab2 获取数据
  5. 用户视图 tab1
  6. selenium 从 tab1 获取数据
  7. 用户视图 tab3
  8. selenium 从 tab3 ...等获取数据

目前我只能从 tab1 获取数据。如果用户查看 tab2,除非我 switch_to_window,否则 selenium 什么也不做。但我不知道用户正在查看哪一个标签。

标签: pythonseleniumselenium-webdriver

解决方案


是的,这是可能的。

要切换窗口,请.switch_to.window改为使用.swith_to_window

driver.switch_to.window(driver.window_handles[1])
print(driver.current_window_handle)

[1]> 请替换为您想要的索引。

要获得标题使用:

print(driver.title)

要获取索引当前选项卡,请使用:

print(driver.window_handles.index(driver.current_window_handle))

或者for each像下面的例子一样使用循环(参考你的场景):

driver.get('https://google.com')
driver.execute_script('window.open("https://yahoo.com");')
driver.execute_script('window.open("https://gmail.com");')

for handle in driver.window_handles:
    driver.switch_to.window(handle)
    print(driver.window_handles.index(handle))
    print(handle)
    print(driver.title)

推荐阅读