我想使用 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
Selenium 不提供 API 来操作浏览器选项卡。您可能已经注意到,应用CTRL/COMMAND+T
“hack”打开一个新选项卡。
更多信息请访问:
- 在 Selenium 中控制 Firefox 选项卡 https://stackoverflow.com/questions/28079411/controlling-firefox-tabs-in-selenium
- 通过 selenium web 驱动程序命令在浏览器的同一窗口会话中打开新选项卡? https://stackoverflow.com/questions/28165193/opening-a-new-tab-in-the-same-window-session-of-the-browser-through-selenium-web
相反,打开新的浏览器窗口。
好吧,公平地说,值得一提的是,Firefox 和 Chrome 中的行为完全不同 - 如果您在 Chrome 中打开新选项卡,selenium 会将每个选项卡视为具有自己句柄的窗口,您将在它们之间进行切换使用switch_to.window() https://selenium-python.readthedocs.org/api.html#selenium.webdriver.remote.webdriver.WebDriver.switch_to_window easily.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)