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

使用Python读取网页QR code:操作WhatsApp Web时cv2等库报错如何解决

网页二维码读取功能修复方案

错误原因说明

  • 第一个版本错误点:cv2.QRCodeDetector 初始化不需要传入参数,且该类的解码方法只接受图片格式的输入(如OpenCV读取后的numpy数组),直接传入Selenium的driver对象属于参数类型完全不匹配,所以触发系统级错误。
  • 第二个版本错误点:qrcode库的QRCode类是用于生成二维码的工具,本身不具备二维码解析功能,属于调用了错误的依赖库。

正确实现思路

  1. 用Selenium定位到页面上的二维码元素
  2. 对二维码元素单独截图,得到原始图片数据
  3. 将图片数据转成OpenCV可处理的格式,再调用二维码检测解码接口获取内容

依赖安装

运行前先安装所需依赖:

pip install selenium opencv-python pillow webdriver-manager

可运行完整代码

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 webdriver_manager.firefox import GeckoDriverManager
import cv2
import numpy as np
from PIL import Image
import io

# 初始化火狐浏览器
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
driver.get("https://web.whatsapp.com/")

try:
    # 最多等待10秒,直到二维码canvas元素加载完成
    qr_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "canvas"))
    )
    # 对二维码元素截图,得到bytes格式的图片数据
    qr_png = qr_element.screenshot_as_png
    # 将bytes转成PIL Image,再转成OpenCV可用的numpy数组
    img = Image.open(io.BytesIO(qr_png))
    img_cv = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
    
    # 初始化二维码检测器,解码内容
    detector = cv2.QRCodeDetector()
    data, bbox, straight_qrcode = detector.detectAndDecode(img_cv)
    
    if data:
        print(f"读取到的二维码内容为:{data}")
    else:
        print("未检测到有效二维码,请检查页面加载状态")
finally:
    # 操作完成后关闭浏览器
    driver.quit()

注意事项

  • 运行时需要保证网络正常,WhatsApp Web页面能正常加载出二维码
  • 如果页面二维码刷新频率过高,可适当调整等待时间,或者检测到内容为空时重新截图解析
  • 如果要适配其他网站的二维码,只需要修改元素定位规则,把By.TAG_NAME, "canvas"换成对应网站二维码元素的定位参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:15:04