使用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
相关产品推荐
相关产品推荐

