Selenium(Python+SafariDriver)无法点击带onclick=proceed()的下一页表格
解决Selenium SafariDriver无法点击下一页的方案
针对你遇到的情况,结合HTML里绑定的onclick="proceed()"事件,推荐以下几种可行方案:
1. 直接调用页面JS函数
跳过元素点击环节,直接通过Selenium执行页面绑定的proceed()函数,这是最直接的触发方式:
browser.execute_script("proceed();")
2. 确保元素可见后再点击
Safari对元素可见性要求较高,先滚动到目标元素所在视口,再执行点击:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待表格元素可点击 next_table = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, "nav_entry"))) # 滚动到元素位置 browser.execute_script("arguments[0].scrollIntoView(true);", next_table) # 执行点击 next_table.click()
3. 检查是否存在iframe嵌套
如果目标元素嵌套在iframe中,需先切换到对应iframe才能操作:
# 根据实际iframe的定位方式(id/name/class等)找到iframe iframe = browser.find_element(By.ID, "iframe_id") # 切换到iframe内 browser.switch_to.frame(iframe) # 执行跳转操作(比如调用JS函数) browser.execute_script("proceed();") # 操作完成后切回主文档 browser.switch_to.default_content()
4. 检查SafariDriver配置
SafariDriver有特殊权限要求,确认以下配置是否正确:
- 开启Safari「开发」菜单:偏好设置 → 高级 → 勾选「在菜单栏中显示“开发”菜单」
- 在开发菜单中开启「允许远程自动化」
- 确保Safari版本与SafariDriver版本匹配(通常随系统更新同步)
5. 排除页面遮罩/弹窗干扰
如果页面存在加载遮罩、弹窗等覆盖元素,需先等待这些元素消失:
# 根据实际遮罩元素的定位方式修改,示例用class定位 WebDriverWait(browser, 20).until(EC.invisibility_of_element_located((By.CLASS_NAME, "loading-mask"))) # 再执行跳转操作 browser.execute_script("proceed();")
内容的提问来源于stack exchange,提问作者geesebeater
相关产品推荐
相关产品推荐

