Python Selenium自动化测试:Click方法无法打开新页面问题
解决Selenium Click无法打开新页面的问题
先看你代码里的明显错误:
- 变量名写错了:
drive.webdriver.Chrome应该改成driver = webdriver.Chrome,不然会直接报错找不到driver变量。
接下来针对Click没打开新页面的问题,给你几个排查和解决方向:
1. 确认元素定位是否正确
先检查stylesheet1这个ID对应的元素是不是真正的可点击链接(比如<a>标签)。如果是<div>、<span>这类非链接元素,可能本身就不是用来打开新页面的,或者需要触发特定JS事件才能跳转。
可以先打印元素信息确认:
element = driver.find_element(By.ID,"stylesheet1") print(element.tag_name) print(element.get_attribute("target"))
如果是<a>标签且带有target="_blank"属性,点击后应该会打开新窗口;如果没有target属性,点击会在当前窗口跳转。
2. 等待元素加载完成
页面可能还没完全加载就执行了点击,导致元素处于不可交互状态。用显式等待代替time.sleep(),更可靠:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待元素可点击,最多等10秒 wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "stylesheet1"))) element.click()
3. 切换到新窗口
如果点击成功但Selenium仍停留在原窗口,需要手动切换窗口句柄:
# 点击前先记录原窗口句柄 original_window = driver.current_window_handle element.click() # 等待新窗口出现,切换过去 wait.until(EC.number_of_windows_to_be(2)) for window_handle in driver.window_handles: if window_handle != original_window: driver.switch_to.window(window_handle) break # 现在可以操作新窗口了 print(driver.title)
4. 检查浏览器驱动兼容性
ChromeDriver版本必须和你安装的Chrome浏览器版本完全匹配,版本不匹配会导致各种交互异常,去对应官网下载同版本驱动即可。
最后给你修正后的完整代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 修正变量名错误 driver = webdriver.Chrome(executable_path=r"C:\Users\mvintee\project_for_selenium\chromedriver_win32\chromedriver.exe") driver.get("https://www.verio.com/") print("原窗口标题:", driver.title) # 等待元素可点击并执行点击 wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "stylesheet1"))) original_window = driver.current_window_handle element.click() # 切换到新窗口 wait.until(EC.number_of_windows_to_be(2)) for handle in driver.window_handles: if handle != original_window: driver.switch_to.window(handle) break print("新窗口标题:", driver.title) # 测试完成后关闭浏览器 driver.quit()
内容的提问来源于stack exchange,提问作者vintee shukla
相关产品推荐
相关产品推荐

