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

如何用Selenium滚动Flickr页面获取全部图片链接?

滚动Flickr页面获取全部图片链接的解决方案

Flickr群组页面采用懒加载机制,只有滚动到页面底部时才会加载更多图片。你的代码仅获取了首屏加载的内容,因此需要模拟滚动操作触发全部图片加载后再解析页面。

以下是修改后的代码,核心逻辑是循环滚动页面,直到没有新内容加载为止:

from bs4 import BeautifulSoup
from selenium import webdriver
import time

op = webdriver.ChromeOptions()
op.add_argument('headless')
# 无头模式下设置窗口大小,避免页面布局异常导致加载失败
op.add_argument('window-size=1920x1080')
driver = webdriver.Chrome(options=op)
url = "https://www.flickr.com/groups/allfreepictures/pool/page3041"

driver.get(url)

# 模拟滚动到底部加载全部内容
last_page_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 执行滚动脚本,滚到当前页面最底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待新内容加载,时间可根据网络速度调整
    time.sleep(2)
    # 获取滚动后的页面高度
    current_page_height = driver.execute_script("return document.body.scrollHeight")
    # 如果高度不再变化,说明已加载完所有内容
    if current_page_height == last_page_height:
        break
    last_page_height = current_page_height

# 解析完整加载后的页面
soup = BeautifulSoup(driver.page_source, 'html.parser')
image_urls = [link['href'] for link in soup.findAll("a", {"class": "overlay"})]
print(f"共获取到 {len(image_urls)} 个图片链接")
print(image_urls)

driver.quit()

关键细节说明:

  • 滚动判断逻辑:通过对比滚动前后的页面高度,确认是否还有新内容需要加载,高度不再变化时终止循环。
  • 无头模式优化:添加window-size参数,避免无头浏览器因窗口尺寸过小导致页面元素加载异常。
  • 加载等待:使用time.sleep简单等待新内容加载,若网络不稳定,可替换为WebDriverWait等待新的图片元素出现,提升可靠性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:26:20