使用Selenium+Python在Firefox中点击新标签页链接后无法聚焦求助
解决Selenium 3.x中切换到新标签页的问题
嘿,这个问题我之前踩过坑!核心原因很简单:Selenium的driver实例默认会停留在原来的标签页,哪怕你通过脚本点击打开了新标签页,它也不会自动切换过去,所以你拿到的driver.title还是原页面的内容。下面给你几个实用的解决方案:
方法一:直接切换到最新打开的标签页
新标签页的句柄会被添加到window_handles列表的末尾,所以我们可以直接获取列表最后一个元素来切换:
# 先执行你的点击操作 element = driver.find_element_by_xpath("html/body/footer/div/div[1]/section/div/div/div[2]/div[1]/ul/li[9]/div/div/a") driver.execute_script("arguments[0].click();", element) # 获取所有窗口句柄,切换到最后一个(新标签页) all_window_handles = driver.window_handles driver.switch_to.window(all_window_handles[-1]) # 现在就能拿到新标签页的标题了 print(driver.title)
方法二:通过原窗口句柄定位新标签页
如果你的场景里可能存在多个标签页,担心[-1]不够准确,可以先记录原窗口的句柄,再遍历找到新的那个:
# 记录原窗口的句柄 original_handle = driver.current_window_handle # 执行点击操作 element = driver.find_element_by_xpath("html/body/footer/div/div[1]/section/div/div/div[2]/div[1]/ul/li[9]/div/div/a") driver.execute_script("arguments[0].click();", element) # 遍历所有句柄,切换到非原窗口的那个 for handle in driver.window_handles: if handle != original_handle: driver.switch_to.window(handle) break # 验证新标签页标题 print(driver.title)
额外提示:等待页面加载完成
有时候新标签页加载需要时间,直接获取标题可能会拿到空或者错误内容,建议配合WebDriverWait做显式等待:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 切换到新标签页后,等待标题包含预期关键词(比如你知道新页面标题里有某个词) WebDriverWait(driver, 10).until(EC.title_contains("目标页面关键词")) # 再获取标题或操作元素 print(driver.title)
内容的提问来源于stack exchange,提问作者Bikash Mandal
相关产品推荐
相关产品推荐

