You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python+Selenium爬取bol.com评论时点击按钮定位失败的解决

解决Selenium无法定位"Toon meer"加载更多按钮的问题

我来帮你排查下问题,你遇到的No such element错误主要有几个原因,咱们一步步解决:

1. 错误的CSS选择器

你看原HTML里的按钮是<a>标签,不是<div>,而且两个类名review-load-more__buttonjs-review-load-more-button之间需要用.连接(表示同时拥有这两个类的元素),你之前的写法会被解析成"找div标签下的review-load-more__button类元素,再找它下面的js-review-load-more-button类元素",这明显和页面结构不符。

更靠谱的选择器可以直接用按钮的data-test属性,因为这个属性一般是专门给测试用的,不会轻易变动:

[data-test="review-load-more"]

2. 页面加载延迟导致元素未渲染

直接调用driver.find_element_by_css_selector()的时候,页面可能还没完全加载出这个按钮,所以需要加显式等待,等元素可点击后再操作,避免因为渲染延迟找不到元素。

3. 需要循环点击直到所有评论加载完成

这个按钮不是点一次就加载全部评论的,每次点击只会加载10条左右,所以要循环点击,直到按钮消失(没有更多评论可加载)。

修改后的完整代码

import requests
import pandas as pd
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 bs4 import BeautifulSoup
from datetime import datetime
import time

start_time = datetime.now()
data = []
link = "https://www.bol.com/nl/p/Matras-140x200-7-zones-koudschuim-premium-plus-tijk-15-cm-medium/9200000118425897/"

op = webdriver.ChromeOptions()
op.add_argument('--ignore-certificate-errors')
op.add_argument('--incognito')
op.add_argument('--headless')
driver = webdriver.Chrome(executable_path='D:/Desktop/work/real/chromedriver.exe', options=op)
driver.get(link)

wait = WebDriverWait(driver, 10)  # 最多等待10秒

try:
    while True:
        # 等待加载更多按钮可点击
        load_more_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[data-test="review-load-more"]')))
        load_more_btn.click()
        time.sleep(1)  # 给页面一点加载时间,也可以用显式等待等待评论加载完成
except Exception as e:
    # 当按钮消失(没有更多评论)时,会抛出异常,此时退出循环
    print("所有评论已加载完成,或找不到加载按钮:", e)

# 这里可以继续解析页面上的所有评论
soup = BeautifulSoup(driver.page_source, 'html.parser')
# 后续的评论解析逻辑...

driver.quit()
print(f"总耗时: {datetime.now() - start_time}")

关键说明

  • WebDriverWait替代直接查找元素,保证元素已加载完成
  • 循环点击按钮直到抛出异常(按钮消失),确保加载全部评论
  • 选择器用[data-test="review-load-more"]比类名更稳定,避免网站更新类名导致代码失效

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

火山引擎 最新活动