ChromeDriver调用.click()触发onclick()函数时出现异常,手动操作正常的问题排查求助
ChromeDriver调用.click()触发onclick()函数时出现异常,手动操作正常的问题排查求助
我现在碰到一个棘手的问题:手动点击表格行里的某列TD元素时,会正常弹出新窗口展示对应账单的详情,但用ChromeDriver执行.click()操作时,却触发了目标页面的动态错误,还出现了几个手动操作时不会有的报错。想请各位帮忙分析下问题根源,或者给点解决思路?
目标元素结构
我要点击的是表格行里的一个TD,它的HTML结构是这样的:
<td onclick="ShowAdvancedTimeEntry(1,0,0,'276984899',0,generateRandom());return false;">TG</td>
我的自动化实现逻辑
我是这么写的遍历和点击逻辑,尝试点击TD里的div和span元素(也试过直接点击TD本身):
bills_xpath = './/tr[@class="rowb"]' bills = group.find_elements(By.XPATH, bills_xpath) for j, bill in enumerate(bills): data_bill = bill.find_elements(By.TAG_NAME, 'td') wait_element = data_bill[5].find_element(By.XPATH, './/div//span') wait_element.click() for window in all_windows: if window != original_window: d.switch_to.window(window) # 获取新窗口中的所需数据 d.close() d.switch_to.window(original_window)
手动与自动化操作的差异
- 手动操作:点击后正常弹出新窗口,加载并展示账单详情,没有任何错误。
- 自动化操作:触发新窗口后,目标页面的HTML里出现了本不该显示的动态错误提示(看起来是加载相关的KO模板):
<!-- ko if: false --> <div id="refreshOverlay" class="timersRefreshing" style="z-index:1"> Loading... </div> <!-- /ko --> <!-- #region TIMER -->
同时还出现了三个jQuery相关的调用异常,这些错误在手动操作时完全不会出现。
我已经尝试过的解决方法
目前试了几种方案,但都没解决问题:
- 配置ChromeDriver选项:禁用扩展、设置
page_load_strategy = 'eager' - 增加等待逻辑:等待Ajax请求完成(通过
jQuery.active == 0判断)、等待页面document.readyState变为complete、等待元素处于可点击状态 - 尝试直接点击TD元素(
data_bill[5].click()),而不是里面的子元素 - 尝试传递认证令牌,但也没效果
现在我有点困惑,为什么ChromeDriver的点击操作和手动点击会有这么大的差异?是不是触发onclick事件的方式不一样,导致后续的jQuery/Ajax调用出问题了?有没有朋友遇到过类似的情况,或者知道怎么解决这个问题?
备注:内容来源于stack exchange,提问作者Trent Giffin
相关产品推荐
相关产品推荐

