【问题标题】:selenium window_handles not correct when new window is opened wtih Python使用 Python 打开新窗口时,selenium window_handles 不正确
【发布时间】:2015-07-27 07:49:50
【问题描述】:

我想使用 selenium 和 Python 在一个浏览器中打开多个选项卡,并同时使用多个选项卡获取实时投注赔率。

网站首页生成游戏列表。但是,除非您找到游戏元素并使用 click()(该网站是 ajax 重),否则无法获取游戏的链接,这将在同一选项卡中打开游戏。我打开多标签的解决方案是获取游戏列表,然后手动打开新标签并首先加载主页,然后单击列表中具有不同索引的游戏。但是,我发现 driver.window_handles 数组始终只包含一项,这是当前选项卡,而不是我在浏览器中手动打开的所有选项卡。

谁能告诉我出了什么问题,或者您是否可以为这个问题提供更好的解决方案?

问题简化为以下代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# create a new Firefox session


driver_temp = webdriver.Firefox()
driver_temp.implicitly_wait(30)
driver_temp.get("https://www.google.com")
body = driver_temp.find_element_by_tag_name('body')

# manually open second tab
body.send_keys(Keys.CONTROL + 't')
driver_temp.get("https://www.google.com")
body = driver_temp.find_element_by_tag_name('body')

# manually open third tab
body.send_keys(Keys.CONTROL + 't')
driver_temp.get("https://www.google.com")
body = driver_temp.find_element_by_tag_name('body')

#print the number of window_handles
print len(driver_temp.window_handles)

我打开了 3 个选项卡,但是 len(driver_temp.window_handles) 始终为 1

【问题讨论】:

    标签: python selenium selenium-webdriver webdriver window-handles


    【解决方案1】:

    Selenium 不提供 API 来操作浏览器选项卡。您可能已经注意到,应用CTRL/COMMAND+T“hack”来打开一个新标签。

    查看更多:

    相反,打开新的浏览器窗口。


    好吧,公平地说,重要的是要提到 Firefox 和 Chrome 中的行为完全不同 - 如果您在 Chrome 中打开新标签页,selenium 会将每个标签页视为具有自己句柄的窗口,您将使用switch_to.window() 在它们之间轻松切换。

    【讨论】:

    • 这并不完全公平。从浏览器的角度来看,同一浏览器实例上下文中的“选项卡”和“新窗口”可能是相同的。大多数浏览器甚至为每个选项卡/窗口(Chrome、FF)都有一个单独的进程。这就是为什么 Selenium 确实提供了用于操作选项卡的 API,但它不是真正的选项卡,它只是一个单独的窗口句柄 (code.google.com/p/selenium/wiki/JsonWireProtocol#GET_/session/…)
    • @Stanjer 是的,我已经多次编辑了这个短语,试图找到对这种情况的更好描述。谢谢。
    猜你喜欢
    • 2022-01-22
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多