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

