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

使用Selenium爬取EMMA网站CUSIP详情无法提取目标HTML怎么办

问题原因

你代码的核心问题是:Selenium启动的浏览器和你后续调用的requests是完全独立的两个会话,不存在状态共享。你之前在浏览器中点击同意cookie、同意免责声明的操作产生的会话凭证、cookie都只存在于Selenium控制的Chrome进程里,用requests直接请求详情页URL时,网站会判定你未同意相关协议,直接返回无数据的空白/提示页面,自然找不到目标标签。
另外这类站点的详情数据大多是页面加载后动态渲染的,即使你给requests带上cookie,也大概率拿不到渲染后的完整内容。

解决方法

直接通过Selenium获取已经完成渲染的页面源码即可,不需要额外调用requests请求。你可以等目标元素加载完成后,调用driver.page_source拿到完整HTML。

修改后的完整代码
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 as bs

# 输入要搜索的CUSIP
CUSIP = "266818BT9"
# EMMA首页地址
URL = "https://emma.msrb.org/"

driver = webdriver.Chrome()
# 隐式等待全局只需设置一次
driver.implicitly_wait(10)
driver.get(URL)

wait = WebDriverWait(driver, 15)
# 同意cookie
wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="acceptId"]'))).click()

# 输入CUSIP并搜索
SearchBox = driver.find_element(By.XPATH, '//*[@id="quickSearchText"]')
SearchBox.send_keys(CUSIP)
SearchButton = driver.find_element(By.XPATH, '//*[@id="quickSearchButton"]')
SearchButton.click()

# 同意免责声明
AcceptButton2 = wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="ctl00_mainContentArea_disclaimerContent_yesButton"]')))
AcceptButton2.click()

# 等待目标数据块加载完成,避免页面还没渲染完就拿源码
wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'info-focus-2')))

# 直接拿Selenium渲染好的完整页面源码,不需要requests
page_source = driver.page_source
soup = bs(page_source, 'lxml')

# 提取目标数据示例
info_block = soup.find('ul', class_='info-focus-2')
# 拿Dated Date对应的值
dated_date = info_block.find('span', string='Dated Date').find_next('span', class_='float-right').text
print(f"Dated Date: {dated_date}")
# 遍历所有字段
for li in info_block.find_all('li'):
    label = li.find('span').text.strip()
    value = li.find('span', class_='float-right').text.strip()
    print(f"{label}: {value}")

# 用完记得关闭浏览器
driver.quit()
补充说明
  • 代码里把旧版Selenium的find_element_by_xpath写法替换成了新版标准的find_element(By.XPATH, xxx),兼容Selenium 4.0+版本
  • 增加了显式等待目标元素加载的逻辑,避免网络波动导致页面没渲染完就提取数据返回空值
  • 不需要手动处理UA和cookie,Selenium控制的浏览器会自动处理所有会话状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:18:03