Python Selenium爬取Jooble页面时如何点击Load more加载更多按钮
解决方案
失效原因排查
- 你使用的绝对XPath过于脆弱,页面DOM结构稍有变动就会定位失败
- 未等待按钮完全进入可交互状态就执行点击操作
- Selenium原生点击要求元素完全可见、未被其他元素遮挡,部分场景下会被页面交互逻辑拦截
- 你现有代码中滚动到底部点击按钮后立刻回顶的操作,会导致按钮还未完成点击触发就离开视口
修正步骤
- 替换为更稳定的相对XPath定位,通过按钮文本匹配元素,不受页面结构变动影响
- 替换硬等待为显式等待,确保按钮可点击后再执行操作
- 使用JavaScript执行点击,绕过Selenium原生点击的限制条件
- 调整滚动逻辑,确认新内容加载完成后再执行回顶操作
可用代码示例
首先导入所需依赖:
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
相关产品推荐
相关产品推荐

