请求协助绕过reCAPTCHA与反爬完成巴西NF-e网站多步骤数据爬取
合规爬取巴西SEFAZ GO NFC-e数据:绕过反爬与reCAPTCHA方案
核心问题拆解
- 会话过期:网站依赖完整的浏览器会话上下文(Cookie、请求状态),跳步访问详情页会触发会话校验失败
- IP/请求封禁:普通Python请求(如requests库)缺少浏览器指纹,访问频率异常会被反爬系统拦截
- reCAPTCHA验证:强制人机校验是网站防爬的核心环节,需模拟人类交互或采用合规方式绕过
解决方案步骤
1. 用Undetected Chrome模拟真实浏览器会话
普通Selenium易被网站的反爬机制识别,undetected-chromedriver会修改Chrome的自动化特征,模拟真实用户的浏览器环境,避免被标记为爬虫。
依赖安装
pip install undetected-chromedriver selenium
核心代码实现
import time import random from undetected_chromedriver import Chrome, ChromeOptions def scrape_nfce(access_key): # 配置浏览器选项,隐藏自动化痕迹 options = ChromeOptions() options.add_argument("--disable-blink-features=AutomationControlled") options.add_argument("--start-maximized") options.add_argument("--disable-extensions") # 初始化防检测Chrome实例 driver = Chrome(options=options) try: # 1. 访问初始查询页,建立会话 driver.get("https://nfeweb.sefaz.go.gov.br/nfeweb/sites/nfe/consulta-completa") time.sleep(random.uniform(2, 4)) # 随机延迟模拟人类浏览 # 2. 输入Access Key并提交查询 # 注意:需根据实际页面元素调整定位器(F12查看元素ID/XPath) key_input = driver.find_element("id", "chaveAcesso") key_input.send_keys(access_key) search_btn = driver.find_element("xpath", "//button[normalize-space()='Pesquisar']") search_btn.click() time.sleep(3) # 手动完成reCAPTCHA验证(小批量爬取的合规方式) input("请完成页面reCAPTCHA验证,验证通过后按回车继续...") # 3. 进入NFC-e详情页 view_btn = driver.find_element("xpath", "//a[contains(text(), 'Visualizar NFC-e Detalhada')]") view_btn.click() time.sleep(random.uniform(2, 4)) # 4. 切换到"Produtos e Serviços"标签提取数据 products_tab = driver.find_element("xpath", "//a[normalize-space()='Produtos e Serviços']") products_tab.click() time.sleep(2) # 提取商品数据(示例:假设数据在表格中) product_table = driver.find_element("xpath", "//table[contains(@class, 'tb_dados')]") rows = product_table.find_elements("tag name", "tr") print("提取的商品数据:") for row in rows[1:]: # 跳过表头行 cols = row.find_elements("tag name", "td") row_data = [col.text.strip() for col in cols if col.text.strip()] print(row_data) except Exception as e: print(f"爬取异常:{str(e)}") finally: driver.quit() # 示例调用 if __name__ == "__main__": target_key = "52241061585865236600650040001896941930530252" scrape_nfce(target_key)
2. 合规处理reCAPTCHA
- 小批量爬取:采用手动验证方式(如代码中暂停等待用户操作),完全符合网站的人机校验规则
- 大批量爬取:需向SEFAZ申请官方API接口(如果开放),或使用Google官方的reCAPTCHA Enterprise服务进行自动化验证(需符合Google的服务条款)
3. 避免封禁的关键措施
- 控制访问频率:每次页面跳转后添加2-5秒的随机延迟,避免短时间内大量请求
- IP轮换:如需批量爬取,使用高质量的住宅代理池,避免单一IP被频繁标记
- 请求头模拟:确保浏览器请求头与真实用户一致(undetected-chromedriver已自动处理)
注意事项
- 页面元素定位器(ID/XPath)需根据当前页面结构调整,建议用Chrome开发者工具实时查看
- 爬取数据需遵守巴西《通用数据保护法》(LGPD)及SEFAZ网站的使用条款,仅用于合法用途
内容的提问来源于stack exchange,提问作者RooseveltJr
相关产品推荐
相关产品推荐

