Selenium Python中如何点击绑定JavaScript逻辑的页面元素
Selenium点击绑定JS函数的HTML4 a标签失败解决方案
针对点击a标签触发JS函数报错的场景,可按以下优先级尝试解决方案:
方案1:点击a标签内部的img元素
部分老旧HTML4页面中,a标签本身没有实际可交互的宽高,点击事件的响应区域实际由内部的img元素承载,直接点击a标签会触发元素不可交互的报错:
from selenium.webdriver.common.by import By # 从已获取的a元素下定位内部登录按钮图片 img_element = a_element.find_element(By.NAME, "login_button") # 点击图片元素 img_element.click()
方案2:使用JavaScript执行点击动作
Selenium原生点击依赖浏览器的元素可交互性校验,老旧页面经常出现校验不通过的情况,直接通过JS触发点击动作可绕过该限制:
# arguments[0]对应传入的a_element元素对象 driver.execute_script("arguments[0].click();", a_element)
方案3:直接执行href中绑定的JS函数
你已经确认a标签的href属性为javascript:open_login_page();,可直接调用对应的JS函数实现相同效果:
写法1:直接调用已知函数
driver.execute_script("open_login_page();")
写法2:通用解析href执行(适配未知JS函数的场景)
# 获取href属性内容 href_text = a_element.get_attribute("href") # 移除前缀"javascript:"得到可执行的JS代码 exec_js = href_text.replace("javascript:", "") # 执行代码 driver.execute_script(exec_js)
新窗口切换提示
点击后如果弹出新窗口,可通过以下代码切换到新窗口执行后续操作:
# 点击前保存原有窗口句柄 origin_handle = driver.current_window_handle # 执行点击动作后遍历所有窗口句柄 for handle in driver.window_handles: if handle != origin_handle: # 切换到新窗口 driver.switch_to.window(handle) break
内容的提问来源于stack exchange,提问作者kensuke1984
相关产品推荐
相关产品推荐

