Selenium click()触发__doPostBack为何在新标签页打开页面?
解决Selenium点击__doPostBack链接新开标签页的问题
你遇到的这种ASP.NET页面__doPostBack链接在Selenium点击时新开标签页,但手动点击正常的情况,大概率是自动化环境下的点击行为触发了页面特殊的事件逻辑,试试下面这些解决办法:
1. 直接调用__doPostBack函数
跳过元素点击环节,直接执行页面的__doPostBack JavaScript代码,这是最稳妥的方式,完全模拟页面原本的逻辑:
# 先确保页面已加载完成,__doPostBack函数可用 WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, case_num))) # 执行对应的__doPostBack调用 driver.execute_script("__doPostBack('ctl00$ContentPlaceHolder1$SearchResults','openDetails$0')")
2. 用ActionChains模拟真实鼠标点击
有时候Selenium的click()方法和真实鼠标点击的触发逻辑有差异,试试用ActionChains模拟原生左键点击:
from selenium.webdriver.common.action_chains import ActionChains # 等待元素可点击 element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, case_num))) # 模拟鼠标移动到元素上再点击 ActionChains(driver).move_to_element(element).click().perform()
3. 移除元素的异常事件监听
部分页面会给链接绑定全局点击事件,在自动化环境下篡改了打开方式,可以先移除元素的点击事件再点击:
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, case_num))) # 清除元素的onclick事件 driver.execute_script("arguments[0].onclick = null;", element) element.click()
额外排查小技巧
- 把等待条件从
presence_of_element_located换成element_to_be_clickable,确保元素真正可以交互后再点击 - 检查Selenium启动的浏览器配置,有没有默认设置“在新标签页打开链接”
内容的提问来源于stack exchange,提问作者Divia
相关产品推荐
相关产品推荐

