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

如何用Python 3.5/Selenium/PhantomJS点击加载更多按钮?

嘿,我来帮你搞定这个加载更多按钮的点击问题!结合你描述的页面结构,这里有几个靠谱的方案,你可以根据实际情况选择:

方案1:定位可见的加载按钮(最稳妥)

因为第一个按钮加载完成后会被加上is-hidden类隐藏,我们直接定位没有这个类的按钮就行——不管是第一个还是第二个,只要是可见可点击的都会被选中,容错性更高。

核心思路

用CSS选择器筛选出带有data-behavior="result-paging"属性且没有is-hidden类的按钮,然后循环点击,直到找不到这样的按钮(或者点击后没有新内容加载)。

代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

# 初始化PhantomJS驱动(如果PhantomJS不在系统PATH里,要指定executable_path路径)
driver = webdriver.PhantomJS(executable_path="/path/to/phantomjs")
driver.get("你的目标网页URL")

wait = WebDriverWait(driver, 10)  # 设置10秒的显式等待超时时间

while True:
    try:
        # 等待可见的加载按钮出现并可点击
        load_more_btn = wait.until(EC.element_to_be_clickable(
            (By.CSS_SELECTOR, 'button[data-behavior="result-paging"]:not(.is-hidden)')
        ))
        
        # 记录当前商品数量,用来判断是否加载了新内容
        current_item_count = len(driver.find_elements(By.CSS_SELECTOR, "这里替换成你页面的商品元素选择器,比如div.product-item"))
        load_more_btn.click()
        
        # 等待新商品加载完成(直到商品数量增加)
        wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, "这里替换成你页面的商品元素选择器")) > current_item_count)
        print(f"已加载更多商品,当前总数:{len(driver.find_elements(By.CSS_SELECTOR, '这里替换成你页面的商品元素选择器'))}")
    
    except TimeoutException:
        # 超时说明没有更多可点击的按钮,或者没有新内容加载了
        print("所有商品已加载完毕!")
        break

# 爬取完成后关闭驱动
driver.quit()
方案2:直接定位第二个按钮

根据你描述的,第二个按钮始终保持不变,那我们可以直接通过索引定位第二个按钮,省去筛选隐藏类的步骤。

核心思路

用XPath的索引选择器(//button[@data-behavior="result-paging"])[2]直接选中第二个按钮,循环点击直到点击后不再加载新内容。

代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

driver = webdriver.PhantomJS(executable_path="/path/to/phantomjs")
driver.get("你的目标网页URL")

wait = WebDriverWait(driver, 10)

while True:
    try:
        # 定位第二个加载按钮
        load_more_btn = wait.until(EC.element_to_be_clickable(
            (By.XPATH, '(//button[@data-behavior="result-paging"])[2]')
        ))
        
        current_item_count = len(driver.find_elements(By.CSS_SELECTOR, "这里替换成商品元素选择器"))
        load_more_btn.click()
        
        # 等待新商品加载,如果超时说明没有更多内容了
        wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, "这里替换成商品元素选择器")) > current_item_count)
    
    except TimeoutException:
        print("所有商品加载完成!")
        break

driver.quit()

注意事项

  1. PhantomJS版本兼容:因为你用的是Python3.5,要搭配Selenium 3.x版本(Selenium 4+已经不再支持PhantomJS了),同时确保PhantomJS的版本和Selenium兼容。
  2. 显式等待优先:尽量用WebDriverWait的显式等待,不要用time.sleep(),这样更稳定,能避免页面未加载完成就操作的问题。
  3. 商品选择器替换:代码里的商品元素选择器(比如div.product-item)需要你根据实际页面的HTML结构替换成正确的选择器,这样才能准确判断是否加载了新内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:08:45