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

Python Selenium页面滚动失效及类名定位元素返回空列表的问题求助

解决Twitch页面视口外链接爬取问题

我来帮你分析下问题所在,以及如何修改脚本:

问题1:滚动操作未生效

你的脚本里用了window.scrollBy(0,document.body.scrollHeight),但Twitch的页面结构中,内容可能并不是挂载在body上滚动的——很多现代网站会用自定义的滚动容器。而且一次性滚动到底部,可能页面还没来得及加载新内容就执行了后续操作,导致滚动没触发动态加载。

问题2:元素定位错误

你用class name定位时传入了多个类名(Layout-sc-nxg1ff-0 itdjvg default-panel),但find_elements(by='class name')只接受单个类名,多个类名空格分隔会被识别为无效参数,这才导致你得到空列表。

修改后的完整脚本

下面是修复后的代码,我加入了更可靠的滚动逻辑、正确的元素定位方式,以及显式等待替代固定睡眠:

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
import time

browser = webdriver.Firefox()
browser.get('https://www.twitch.tv/lirik')
wait = WebDriverWait(browser, 10)

# 先处理可能的Cookie弹窗(如果有的话)
try:
    accept_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Accept')]")))
    accept_btn.click()
except:
    print("没有Cookie弹窗,继续执行")

# 循环滚动加载所有内容
last_height = browser.execute_script("return document.documentElement.scrollHeight")
while True:
    # 滚动到当前页面底部
    browser.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    # 等待内容加载
    time.sleep(2)
    # 计算新的滚动高度并和上次比较
    new_height = browser.execute_script("return document.documentElement.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

# 用CSS选择器定位目标div(多类名用点连接)
panel_blocks = wait.until(EC.presence_of_all_elements_located(
    (By.CSS_SELECTOR, '.Layout-sc-nxg1ff-0.itdjvg.default-panel')
))

# 提取里面的链接
target_links = []
for panel in panel_blocks:
    try:
        link = panel.find_element(By.TAG_NAME, 'a').get_attribute('href')
        target_links.append(link)
    except:
        continue

print(f"找到的链接数量:{len(target_links)}")
print("目标链接列表:")
for link in target_links:
    print(link)

browser.close()

关键修改说明:

  1. 滚动逻辑优化:用循环滚动+判断滚动高度的方式,确保所有动态加载的内容都被加载出来,而不是一次性滚动到底。
  2. 元素定位修复:使用CSS_SELECTOR,多个类名用.连接(.Layout-sc-nxg1ff-0.itdjvg.default-panel),这是定位多类元素的正确方式。
  3. 显式等待替代固定睡眠:用WebDriverWait等待元素可点击或出现,比time.sleep更可靠,能自适应页面加载速度。
  4. 链接提取:定位到目标div后,进一步提取里面的<a>标签的href属性,得到你需要的亚马逊链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:43:23