Selenium点击加载按钮失效,无法加载网站全部评论求助
问题解答
是的,这个TimeoutException确实意味着要么找不到加载更多评论的按钮,要么按钮存在但在设定的20秒超时时间内无法变为可点击状态。
你的代码存在的核心问题
- 绝对XPATH不可靠:你使用的
/html/body/div[3]/div/div[1]/main/div/div[2]/div[2]/div[3]/div[3]/div[51]/div/button是绝对路径,页面结构(比如广告、动态元素加载)稍有变化就会定位失败。 - 异常捕获错误:代码里捕获的是
TimeoutError,但Selenium抛出的是selenium.common.exceptions.TimeoutException,导致异常无法被正确捕获,循环直接报错中断。 - 无头模式缺少窗口尺寸设置:无头模式下默认窗口尺寸很小,可能导致加载按钮不在可视区域内,无法被点击。
- 无加载等待逻辑:点击加载按钮后,没有等待新评论加载完成就立刻尝试下一次点击,可能导致重复操作或提前终止。
修正后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException import time def scrape_comments(url): # 设置Chrome选项 chrome_options = Options() chrome_options.add_argument("start-maximized") chrome_options.add_argument('disable-infobars') chrome_options.add_argument("--block-notifications") chrome_options.add_argument("--headless=new") # 使用新版无头模式,更稳定 chrome_options.add_argument("--window-size=1920,1080") # 设置无头模式窗口尺寸 driver = webdriver.Chrome(options=chrome_options) wait = WebDriverWait(driver, 10) comments = [] try: driver.get(url) # 等待页面核心评论元素加载完成 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".wpd-comment-text"))) while True: try: # 改用相对定位,通过按钮文本定位加载更多按钮 load_more_btn = wait.until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Load More Comments')]")) ) load_more_btn.click() print("已点击加载更多") # 等待新评论加载完成,简单延迟+元素存在校验 time.sleep(1) wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".wpd-comment-text"))) except TimeoutException: print("没有更多评论可加载") break # 解析并提取评论文本 soup = BeautifulSoup(driver.page_source, "html.parser") comment_elements = soup.select(".wpd-comment-text") comments = [elem.get_text(strip=True) for elem in comment_elements] return comments finally: driver.quit() # 调用示例 url = "https://www.rok.guide/buildings/lyceum-of-wisdom/" print(scrape_comments(url))
关键修改说明
- 改用相对定位:通过按钮文本
contains(text(), 'Load More Comments')定位,比绝对路径更适配页面动态变化。 - 修正异常捕获:捕获
TimeoutException而非TimeoutError,确保正确处理加载超时场景。 - 优化无头模式:使用新版
--headless=new并设置窗口尺寸,避免因窗口过小导致元素不可见。 - 添加加载等待:点击后增加延迟和元素校验,确保新评论加载完成后再进行下一次操作。
- 补充评论解析:原代码未实现评论提取逻辑,新增BeautifulSoup解析步骤,直接返回提取后的评论内容。
内容的提问来源于stack exchange,提问作者IvonaK
相关产品推荐
相关产品推荐

