【问题标题】:is it possible to use webdriver/Selenium to get current tab which user actually view是否可以使用 webdriver/Selenium 来获取用户实际查看的当前选项卡
【发布时间】:2019-10-19 04:29:22
【问题描述】:

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

我试过用这个

driver.current_window_handle

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

handles = driver.window_handles

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

driver.swith_to_window(handle)

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

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

场景:

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

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

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    不用一个个切换tab,直接给出需要的tab编号即可。

    driver.switch_to_window(1)
    

    //1 为标签 id

    【讨论】:

    • 是的,我确实想切换到用户正在使用的窗口。但是我不知道如何从标签用户实际视图中获取标签索引或句柄
    • 您能否解释一下您所说的“如果用户查看 tab1/2/..”是什么意思。代码更好。
    【解决方案2】:

    我很好奇为什么不直接切换到标签,因为你可能知道 id

    会比循环快很多

    driver.switch_to_window(句柄)

    【讨论】:

    • 是的,我确实想切换到用户正在使用的窗口。但是我不知道如何从标签用户实际视图中获取标签索引或句柄。当我得到 window_handles 数组时,我不知道用户看到的是哪一个
    • 这总是一个修复标签吗?如果是的话,这个把手很可能是固定的(我需要仔细检查)
    • 对不起。什么是修复标签?不明白
    • 我的意思是句柄可能总是不变的。所以你总是可以用同一个句柄关闭那个标签
    【解决方案3】:

    是的,这是可能的。

    要切换窗口,请使用 .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)
    

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多