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

使用requests库获取带加载页面网站内容时无限循环问题求解

解决方法

你的问题根源在于requests库不会执行页面中的JavaScript。这类先显示加载页再展示内容的网站,通常是靠前端JS动态拉取数据并渲染页面的,用requests直接请求只能拿到最开始的静态加载页面,不管循环多少次,返回的内容都不会变,自然找不到目标input标签,陷入无限循环。

下面给你两种可行的解决思路:

1. 抓包获取真实数据接口(推荐)

打开浏览器开发者工具(按F12),切换到「Network」面板,刷新页面后观察XHR/fetch类型的请求,找到返回目标内容的API接口。直接用requests请求这个接口,就能拿到结构化的数据,不用处理页面渲染问题。

举个简单例子,假设抓包找到的接口是https://example.com/api/data,代码可以这么写:

import requests

api_url = "https://example.com/api/data"
headers = {
    # 复制浏览器请求头里的User-Agent、Cookie等必要参数
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

response = requests.get(api_url, headers=headers)
data = response.json()  # 如果返回的是JSON格式数据
print(data)

2. 使用浏览器自动化工具渲染页面

如果找不到真实接口,就用能模拟浏览器执行JS的工具,比如Selenium或Playwright,它们会像真实浏览器一样加载页面、执行JS,等待内容渲染完成后再获取页面源码。

Selenium示例:

首先需要安装Selenium和对应浏览器的驱动(比如ChromeDriver):

pip install selenium

然后编写代码:

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
from bs4 import BeautifulSoup

url = "你的目标URL"

# 初始化浏览器驱动(这里以Chrome为例)
driver = webdriver.Chrome()
driver.get(url)

# 等待目标input标签出现,最多等10秒
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "input"))
    )
    # 获取渲染后的页面源码
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, "html.parser")
    # 处理你的数据
    inputs = soup.find_all("input")
    print(inputs)
finally:
    driver.quit()  # 关闭浏览器

Playwright示例(更简洁,自动管理驱动):

先安装Playwright:

pip install playwright
playwright install  # 安装浏览器

代码示例:

from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

url = "你的目标URL"

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto(url)
    # 等待input标签出现
    page.wait_for_selector("input")
    # 获取页面源码
    page_source = page.content()
    soup = BeautifulSoup(page_source, "html.parser")
    inputs = soup.find_all("input")
    print(inputs)
    browser.close()

内容的提问来源于stack exchange,提问作者Luís Garcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:33:15