You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium与Python无法点击下一页按钮的问题求助

问题:Selenium无法点击下一页按钮触发TimeoutException

使用Python结合Selenium爬取网页数据时,第一页数据可正常获取,已通过<span class="paging-index-span">元素成功获取总页数(共7页),但尝试点击class为ui-icon-arrow-next-home的下一页按钮时,出现TimeoutException且无额外错误信息。

相关HTML代码片段

<div id="user-list-list-paging-area">  
 <div class="ui-icon-btn-white paging-icon-div">  
 <div class="ui-btn ui-input-btn ui-btn-d ui-corner-all ui-shadow ui-btn-inline">
 <input class="ui-icon-arrow-first ui-disabled" data-inline="true" data-theme="d" type="button" value=""/>
 </div>
</div>
<div class="ui-icon-btn-white paging-icon-div">
 <div class="ui-btn ui-input-btn ui-btn-d ui-corner-all ui-shadow ui-btn-inline">
 <input class="ui-icon-arrow-back-home ui-disabled" data-inline="true" data-theme="d" type="button" value=""/>
 </div>
</div>
<span class="paging-index-span"> 
 <span style="font-size: x-large;">1</span> 
 <span class="page-index cursor-pointer" data-index="2">2</span> 
 <span class="page-index cursor-pointer" data-index="3">3</span> 
 <span class="page-index cursor-pointer" data-index="4">4</span> 
 <span class="page-index cursor-pointer" data-index="5">5</span> 
 ...
 <span class="page-index cursor-pointer" data-index="7">7</span> 
</span>
<div class="ui-icon-btn-white paging-icon-div">
 <div class="ui-btn ui-input-btn ui-btn-d ui-corner-all ui-shadow ui-btn-inline">
 <input class="ui-icon-arrow-next-home" data-inline="true" data-theme="d" type="button" value=""/>
 </div>
</div>
<div class="ui-icon-btn-white paging-icon-div">
 <div class="ui-btn ui-input-btn ui-btn-d ui-corner-all ui-shadow ui-btn-inline">
 <input class="ui-icon-arrow-last" data-inline="true" data-theme="d" type="button" value=""/>
 </div>
</div>

尝试的点击代码

next_page_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'ui-icon-arrow-next-home')))
next_page_button.click()

报错信息

raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

解决方案

  • 优化元素定位方式:改用CSS选择器提升定位精准度,避免class定位可能的歧义:

    next_page_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input.ui-icon-arrow-next-home')))
    next_page_button.click()
    
  • 处理元素可视性问题:若按钮不在当前可视区域,先滚动到元素位置再点击:

    next_page_button = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input.ui-icon-arrow-next-home')))
    # 滚动到元素居中位置
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_page_button)
    # 等待元素可点击后执行点击
    WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input.ui-icon-arrow-next-home'))).click()
    
  • 点击父容器元素:部分页面实际可交互区域是外层div而非input元素,尝试点击按钮的父容器:

    next_page_container = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#user-list-list-paging-area div.paging-icon-div:nth-child(4) .ui-btn')))
    next_page_container.click()
    
  • 检查iframe嵌套:若按钮位于iframe内,需先切换到对应iframe再执行定位操作:

    # 替换为实际iframe的定位标识
    iframe = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'target-iframe-id')))
    driver.switch_to.frame(iframe)
    # 之后再执行按钮定位和点击逻辑
    
  • 添加页面加载等待:每次点击后等待页码更新或新内容加载,确保页面状态稳定后再进行下一次操作:

    current_page_elem = driver.find_element(By.CSS_SELECTOR, '.paging-index-span span[style="font-size: x-large;"]')
    next_page_button.click()
    # 等待当前页码元素失效,说明页面已更新
    WebDriverWait(driver, 10).until(EC.staleness_of(current_page_elem))
    

内容的提问来源于stack exchange,提问作者kotletschabowy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:14:52