使用Selenium爬取带Load More按钮的动态网站时无法点击按钮的问题
解决“Load More”按钮无法点击的爬取问题
针对你爬取https://cellphones.com.vn/catalogsearch/result?q=tivi时无法点击“Load More”按钮的问题,给你几个可行的解决方向:
确保元素在视口内
很多时候按钮存在但不在当前可见区域,直接调用click()会失效。可以先通过JS滚动到按钮位置,再执行点击:button = driver.find_element(By.CSS_SELECTOR, "button[class*='load-more-btn']") driver.execute_script("arguments[0].scrollIntoView(true);", button) button.click()使用显式等待替代直接查找
页面动态加载时,直接find_element可能在元素还未渲染完成时就执行,导致找不到元素。改用WebDriverWait等待元素可点击:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC while True: try: # 等待按钮可点击,最长等待10秒 button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "button[class*='load-more-btn']")) ) driver.execute_script("arguments[0].scrollIntoView(true);", button) button.click() # 等待新内容加载,可根据加载后的产品元素变化优化等待逻辑 time.sleep(2) except: break验证CSS选择器的准确性
右键按钮→检查元素,确认实际的按钮class是否存在动态变化(比如带后缀active或其他变体),换用更稳定的属性选择器,比如如果按钮有data-action="load-more"这类属性,可以写成button[data-action='load-more']。替代方案:直接调用接口
打开浏览器Network标签,点击“Load More”时观察XHR请求,直接模拟该请求获取数据,比Selenium点击更高效稳定。你可以复制请求的URL、请求头和参数,用requests库循环发送请求获取分页数据。
内容的提问来源于stack exchange,提问作者Dung8466
相关产品推荐
相关产品推荐

