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

如何不用Webdriver通过Python爬取带SID参数的Etherscan交易页面?

解决Etherscan交易列表分页SID问题(无需Selenium)

方法1:从初始页面源码提取全局SID

既然window.sid是全局变量,它必然会在页面的JS代码中被定义。你可以先请求目标交易列表的初始页面,用正则匹配直接提取这个值,完全不需要执行JS:

import requests
import re

# 替换成你要爬取的地址交易页URL
base_url = "https://etherscan.io/txs?a=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}

# 获取初始页面源码
response = requests.get(base_url, headers=headers)
response.raise_for_status()

# 匹配window.sid的赋值语句
sid_pattern = re.compile(r'window\.sid\s*=\s*"([^"]+)"')
match_result = sid_pattern.search(response.text)

if match_result:
    sid = match_result.group(1)
    print(f"提取到SID: {sid}")
    
    # 用SID请求分页,比如第3页
    page_url = f"{base_url}&p=3&sid={sid}"
    page_response = requests.get(page_url, headers=headers)
    # 这里可以处理分页返回的HTML内容
else:
    print("页面源码中未找到SID变量")

方法2:复用提取到的SID(基于你的观察)

你提到更换IP、隐身模式后SID仍有效,说明它并非用户专属会话ID,大概率是和服务器时间窗口绑定的固定值。可以提取一次SID后重复使用,直到请求返回错误(比如SID过期),再重新提取新的SID即可。

注意事项

  • 必须携带真实的User-Agent,否则Etherscan可能会拦截请求,不返回包含SID的源码
  • 控制请求频率,避免触发反爬机制导致IP被封
  • 若初始页面源码中未找到SID,可能是页面采用了动态渲染,可以尝试添加Accept-Language等请求头,或者更换代理IP重试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:48:22