Python新手遇AttributeError:NoneType对象无findAll属性求助
问题解决思路
你遇到的AttributeError是因为s.find(id='ResultsContainer')返回了None,说明目标页面里不存在这个id的元素,或者请求没获取到正确的页面内容。
第一步:确保请求能正常获取页面
英国税务网站可能会拦截无浏览器标识的请求,给requests.get添加请求头模拟浏览器即可解决:
from openpyxl import load_workbook # 原代码导入的workbook未使用,可删除 from bs4 import BeautifulSoup import requests url = "https://www.tax.service.gov.uk/check-vat-number/enter-vat-details" # 添加浏览器标识头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } html = requests.get(url, headers=headers) # 先校验请求是否成功 if html.status_code != 200: print(f"请求失败,状态码:{html.status_code}") else: s = BeautifulSoup(html.content, 'html.parser') # 后续定位元素写在这里
第二步:正确定位VAT输入框
实际查看目标页面结构,VAT号码输入框的name属性为vat-number,可通过以下代码定位:
# 找到输入框所在的表单组 form_group = s.find('div', class_='govuk-form-group') if form_group: # 定位VAT输入框 vat_input = form_group.find('input', {'name': 'vat-number'}) if vat_input: print(f"找到VAT输入框:name={vat_input.get('name')},id={vat_input.get('id')}") else: print("未找到VAT输入框") else: print("未找到表单组")
核心问题说明
你之前代码里的ResultsContainer在目标页面中根本不存在,所以s.find()返回None,调用find_all自然会触发报错。
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

