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

如何在Python中获取无value属性的textarea元素值

问题分析与解决方案

问题根源

你遇到的是动态内容渲染问题:页面中textarea#BTCaddrC的内容是通过JavaScript在浏览器加载页面后动态生成的,服务器返回的原始HTML源码里并没有这个值。urllib+lxml只能抓取原始HTML,无法执行JavaScript,自然拿不到渲染后的内容。

解决方案

方案1:使用Selenium模拟浏览器(推荐,直接获取渲染后DOM)

Selenium会模拟真实浏览器的行为,等待JavaScript执行完成后再获取DOM内容,能直接拿到textarea的value值。示例代码如下:

#coding: utf8
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

nb = 36893488147419103232
url_base = f"https://bitcoin.oni.su/{nb}"

# 初始化Chrome浏览器(需提前安装对应版本的chromedriver)
driver = webdriver.Chrome()
try:
    driver.get(url_base)
    # 等待目标textarea元素加载完成,最长等待10秒
    textarea = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "BTCaddrC"))
    )
    # 获取textarea的value属性值
    btc_address = textarea.get_attribute("value")
    print(btc_address)
finally:
    # 关闭浏览器
    driver.quit()

方案2:直接抓取数据接口(更高效)

打开浏览器开发者工具的「Network」标签,刷新页面后,筛选「XHR/Fetch」类型的请求,找到返回比特币地址数据的接口。找到接口后,直接用requests库调用该接口获取数据,无需加载整个页面。

比如假设找到的接口是https://bitcoin.oni.su/api/address?num={nb},代码示例:

#coding: utf8
import requests

nb = 36893488147419103232
api_url = f"https://bitcoin.oni.su/api/address?num={nb}"
headers = {'User-Agent': 'Mozilla/5.0'}

response = requests.get(api_url, headers=headers)
# 根据接口返回的格式解析数据,比如JSON格式
btc_address = response.json().get("address")
print(btc_address)

为什么原代码无法生效?

lxml解析的是服务器直接返回的原始HTML文本,而浏览器开发者工具中看到的DOM是经过JavaScript渲染后的结果,两者内容不一致。原始HTML里的textarea没有value属性,所以你尝试的get_btc_adr[0].value、text等方法都无法拿到数据。

内容的提问来源于stack exchange,提问作者Garbez François

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:26:19