如何存储当前标签页的ID并切换到该标签页?
How do I store the ID of the current tab and switch to this tab?
我打开了一个全新的 window 和三个选项卡。
driver.get('link1')
driver.switch_to.new_window('tab')
driver.get('link2')
wait.sleep(2)
driver.switch_to.new_window('tab')
driver.get('link3')
如何存储 tab1、tab2、tab3 的 ID,以便我可以通过编程方式在它们之间切换?
我试过这个:
original_window = driver.current_window_handle
您没有描述 current_window_handle
遇到的问题,所以我不明白您的问题。如果您收到一些错误消息,那么您应该在问题中显示它。
我创建(许多)选项卡并获得 IDs/handlers
没问题
driver.switch_to.new_window('tab')
tab_id = driver.current_window_handle
稍后切换到此选项卡
driver.switch_to.window(tab_id)
driver.get('link2')
即使我在使用
创建的新 window 中创建选项卡,所有这一切都有效
driver.switch_to.new_window('window')
文档Working with windows and tabs
顺便说一句:在第一句的文档中你可以看到
"WebDriver does not make the distinction between windows and tabs."
最简单的工作代码,首先创建 4 个空选项卡并使用 driver.current_window_handle
获取 ID/handler 并保留在列表中。后来它使用这个列表来切换选项卡并加载 4 个不同的 url。
即使我在 window 中手动切换(或重新排序)选项卡也能正常工作。
测试于:
Linux Mint 20
Python 3.8
Selenium 4.1.3
- 浏览器:
Firefox
、Chrome
、Microsoft Edge
。
我使用模块 webdriver_manager
为当前浏览器自动下载新的驱动程序。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
#from webdriver_manager.firefox import GeckoDriverManager
#from webdriver_manager.microsoft import EdgeChromiumDriverManager
import selenium
print('Selenium:', selenium.__version__)
all_urls = [
'https://httpbin.org/get',
'https://toscrape.com/',
'https://books.toscrape.com/',
'https://quotes.toscrape.com/',
]
all_tabs = []
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
#driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()))
#driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))
#print('--- create second window ---')
#driver.switch_to.new_window('window')
print('--- create empty tabs ---')
for number in range(len(all_urls)):
driver.switch_to.new_window('tab')
tab_id = driver.current_window_handle
all_tabs.append(tab_id)
print(f'tab{number+1}:', tab_id)
print('--- switch tabs to load urls ---')
for number, (tab_id, url) in enumerate(zip(all_tabs, all_urls), 1):
driver.switch_to.window(tab_id)
driver.get(url)
print(f'tab{number}:', driver.current_window_handle, url)
# now you can manually switch/reorder tabs and rerun last for-loop
我打开了一个全新的 window 和三个选项卡。
driver.get('link1')
driver.switch_to.new_window('tab')
driver.get('link2')
wait.sleep(2)
driver.switch_to.new_window('tab')
driver.get('link3')
如何存储 tab1、tab2、tab3 的 ID,以便我可以通过编程方式在它们之间切换?
我试过这个:
original_window = driver.current_window_handle
您没有描述 current_window_handle
遇到的问题,所以我不明白您的问题。如果您收到一些错误消息,那么您应该在问题中显示它。
我创建(许多)选项卡并获得 IDs/handlers
没问题driver.switch_to.new_window('tab')
tab_id = driver.current_window_handle
稍后切换到此选项卡
driver.switch_to.window(tab_id)
driver.get('link2')
即使我在使用
创建的新 window 中创建选项卡,所有这一切都有效driver.switch_to.new_window('window')
文档Working with windows and tabs
顺便说一句:在第一句的文档中你可以看到
"WebDriver does not make the distinction between windows and tabs."
最简单的工作代码,首先创建 4 个空选项卡并使用 driver.current_window_handle
获取 ID/handler 并保留在列表中。后来它使用这个列表来切换选项卡并加载 4 个不同的 url。
即使我在 window 中手动切换(或重新排序)选项卡也能正常工作。
测试于:
Linux Mint 20
Python 3.8
Selenium 4.1.3
- 浏览器:
Firefox
、Chrome
、Microsoft Edge
。
我使用模块 webdriver_manager
为当前浏览器自动下载新的驱动程序。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
#from webdriver_manager.firefox import GeckoDriverManager
#from webdriver_manager.microsoft import EdgeChromiumDriverManager
import selenium
print('Selenium:', selenium.__version__)
all_urls = [
'https://httpbin.org/get',
'https://toscrape.com/',
'https://books.toscrape.com/',
'https://quotes.toscrape.com/',
]
all_tabs = []
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
#driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()))
#driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))
#print('--- create second window ---')
#driver.switch_to.new_window('window')
print('--- create empty tabs ---')
for number in range(len(all_urls)):
driver.switch_to.new_window('tab')
tab_id = driver.current_window_handle
all_tabs.append(tab_id)
print(f'tab{number+1}:', tab_id)
print('--- switch tabs to load urls ---')
for number, (tab_id, url) in enumerate(zip(all_tabs, all_urls), 1):
driver.switch_to.window(tab_id)
driver.get(url)
print(f'tab{number}:', driver.current_window_handle, url)
# now you can manually switch/reorder tabs and rerun last for-loop