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

使用BeautifulSoup获取元素属性时目标元素返回None的技术问题求助

解决无法获取页面中__RequestVerificationToken的问题

我看了你遇到的问题——明明Output.txt里能找到目标input元素,但用BeautifulSoup获取时却返回None,还触发了后续的索引错误。咱们一步步来排查和解决:

问题根源分析

  • 参数错误:你在soup.find()里加了first=True,但BeautifulSoup的find()方法本身就只返回第一个匹配的元素,根本没有这个参数!这个多余的参数会导致find方法无法正确匹配元素,直接返回None。
  • 请求头缺失:很多网站会拦截requests库默认的请求头(默认标识是python-requests),导致返回的页面内容不完整或者和浏览器看到的不一样,这也可能是元素找不到的原因。

修正后的代码

import requests
from bs4 import BeautifulSoup as bs

# 添加模拟浏览器的请求头,避免被网站拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

res = requests.get('https://services.paci.gov.kw/card/inquiry?lang=ar&serviceType=2', headers=headers)
# 保存页面内容时指定编码,避免阿拉伯语乱码
with open('Output.txt', 'w', encoding='utf-8') as f:
    f.write(res.text)

soup = bs(res.text, 'html.parser')
# 去掉错误的first=True参数,find默认返回第一个匹配元素
vToken = soup.find('input', attrs={'name': '__RequestVerificationToken'})

# 增加判断,避免找不到元素时触发异常
if vToken:
    print(vToken)
    print(vToken['value'])
else:
    print("未找到目标元素,请检查页面内容或选择器是否正确")

额外优化说明

  • 写入文件时添加了encoding='utf-8',防止页面中的阿拉伯语等非ASCII字符出现乱码。
  • 增加了if vToken:的判断逻辑,避免找不到元素时直接访问vToken['value']触发KeyError异常,让代码更健壮。
  • 请求头里的User-Agent可以替换成你常用浏览器的标识,打开浏览器开发者工具就能查到自己的User-Agent信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:27:45