不同纵横比窗口下Selenium运行报错,分页元素被遮挡无法点击求解
解决方案
方案1:使用JS触发点击(最便捷)
Selenium原生click方法要求元素在视口内且不被遮挡,而JS执行的点击可以忽略遮挡状态,直接触发元素绑定的点击事件,修改循环内代码如下:
for page in range(2, 10): try: page_ele = WebDriverWait(driver, 20).until( # 只需要判断元素存在即可,不需要可见 EC.presence_of_element_located( ( By.XPATH, f"//*[@id='ctl00_ContentPlaceHolder1_gv_Branch']/tbody/tr[22]/td/table/tbody/tr/td[{page}]/a", ) ) ) # 用JS执行点击,跳过可见性和遮挡校验 driver.execute_script("arguments[0].click();", page_ele)
方案2:隐藏遮挡的悬浮元素(根源解决)
进入页面后直接执行JS把底部遮挡的ATM/网点固定栏隐藏,后续所有操作都不会再遇到遮挡问题,原有点击逻辑无需修改:
driver.get("https://www.iob.in/Branch.aspx") # 隐藏底部固定悬浮的ATM/网点栏,避免遮挡分页控件 driver.execute_script("document.querySelector('.footer_sticky').style.display = 'none';")
方案3:滚动元素到指定位置避开遮挡
如果不想修改页面元素属性也不想用JS点击,可以在点击前把分页元素滚动到视口顶部,避开底部悬浮栏:
page_ele = WebDriverWait(driver, 20).until( EC.presence_of_element_located( ( By.XPATH, f"//*[@id='ctl00_ContentPlaceHolder1_gv_Branch']/tbody/tr[22]/td/table/tbody/tr/td[{page}]/a", ) ) ) # 将元素滚动到视口顶部,避免被底部悬浮栏遮挡 driver.execute_script("arguments[0].scrollIntoView(true);", page_ele) page_ele.click()
内容的提问来源于stack exchange,提问作者AAYUSH JAIN
相关产品推荐
相关产品推荐

