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

Python Selenium爬取Jooble页面时如何点击Load more加载更多按钮

解决方案

失效原因排查

  • 你使用的绝对XPath过于脆弱,页面DOM结构稍有变动就会定位失败
  • 未等待按钮完全进入可交互状态就执行点击操作
  • Selenium原生点击要求元素完全可见、未被其他元素遮挡,部分场景下会被页面交互逻辑拦截
  • 你现有代码中滚动到底部点击按钮后立刻回顶的操作,会导致按钮还未完成点击触发就离开视口

修正步骤

  1. 替换为更稳定的相对XPath定位,通过按钮文本匹配元素,不受页面结构变动影响
  2. 替换硬等待为显式等待,确保按钮可点击后再执行操作
  3. 使用JavaScript执行点击,绕过Selenium原生点击的限制条件
  4. 调整滚动逻辑,确认新内容加载完成后再执行回顶操作

可用代码示例

首先导入所需依赖:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.keys import Keys

修正后的无限加载函数:

def infinite(driver):
    scroll_pause_time = 3
    # 初始化显式等待对象,最长等待10秒
    wait = WebDriverWait(driver, 10)
    last_height = driver.execute_script("return document.body.scrollHeight")

    while True:
        # 滚动到页面底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(scroll_pause_time)

        try:
            # 等待加载更多按钮进入可点击状态,用相对XPath匹配文本
            load_more_btn = wait.until(
                EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'Load more')]"))
            )
            # 用JS执行点击,绕过原生点击限制
            driver.execute_script("arguments[0].click();", load_more_btn)
            time.sleep(scroll_pause_time)
        except Exception as e:
            print('No load more button found, exit')
            break

        new_height = driver.execute_script("return document.body.scrollHeight")
        # 高度无变化说明没有新内容,直接退出
        if new_height == last_height:
            break
        driver.find_element(By.TAG_NAME, 'body').send_keys(Keys.CONTROL + Keys.HOME)
        last_height = new_height
        print('New content loaded')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:54:01