Python Selenium WebDriver click()方法失效问题排查与解决
Fix for Selenium WebDriver Click() Not Executing (No Errors, Element Located)
遇到过一模一样的诡异问题!先给你直接说最终解决办法,再理清楚整个排查过程:
最终解决方案
检查你的Chrome浏览器缩放级别,如果低于100%(比如你遇到的33%),把它恢复到100%默认缩放,WebDriver的click()方法就能正常触发点击操作了。
问题回顾与排查步骤
你的场景太典型了:用Python+Selenium做自动化测试,click()方法无报错但完全没反应,元素能正常定位(能打印出按钮文本"Courses"),代码长期未改动却突然失效。
我帮你梳理下有效的排查路径:
- 先排除版本兼容问题:更新ChromeDriver到对应Chrome版本的最新版、升级Selenium库、甚至更新/降级Chrome浏览器,结果问题依旧,说明不是版本不兼容导致的。
- 忽略非关联错误:终端里的SSL握手错误
ERROR:ssl_client_socket_impl.cc(960)] handshake failed,之前存在时功能正常,所以可以直接排除它是诱因。 - 重置Chrome用户环境:清空自定义的Chrome用户数据文件夹、清除本地缓存文件后,功能突然恢复——这说明问题出在用户配置里,而非代码或驱动本身。
进一步定位后发现,核心原因是:WebDriver的点击操作是基于元素的坐标位置计算的,当Chrome缩放级别过低时,坐标计算会出现偏移,导致点击事件无法命中目标元素,但因为元素本身能被定位到,所以不会抛出任何错误。
附验证测试脚本
你写的测试脚本可以完美复现并验证问题,这里稍微优化下路径处理:
import pathlib import time from selenium import webdriver url = "https://www.geeksforgeeks.org/" path_to_chromedriver_user_data = pathlib.Path(__file__).parent.parent.joinpath("chromedriver/chrome user data").resolve() path_to_chromedriver = pathlib.Path(__file__).parent.parent.joinpath("chromedriver").resolve() options = webdriver.ChromeOptions() options.add_argument(f'user-data-dir={path_to_chromedriver_user_data}') options.add_argument('--ignore-certificate-errors') options.add_argument('--no-sandbox') options.add_argument('--disable-infobars') options.add_argument('--disable-gpu') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(executable_path=f'{path_to_chromedriver}/chromedriver', options=options) driver.set_page_load_timeout(30) driver.get(url) time.sleep(1) button = driver.find_element_by_xpath("/html/body/div[2]/div[1]/ul[1]/li[3]/a") print(button.text) # 输出"Courses"确认元素定位成功 button.click() time.sleep(10) driver.close()
内容的提问来源于stack exchange,提问作者Recently_Created_User
相关产品推荐
相关产品推荐

