ladrift
V2EX  ›  问与答

如何生成完全一样的二维码( QR code)?

  •  
  •   ladrift · Aug 6, 2016 · 6961 views
    This topic created in 3592 days ago, the information mentioned may be changed or developed.

    最近在弄一个 Python 爬虫,碰到了二维码相关的问题。 爬取的网站可以用 QQ 扫码登录。一开始的想法是通过 selenium 获取屏幕截图然后用 zliblight 扫码解读出 URL, 然后再用这个 URL 通过 pyqrcode 生成一个二维码打印到终端上(主要是想只用终端来操作不用打开浏览器,所以采取的这个方案)。但是,扫描终端里的二维码却无法成功登录(手机 QQ 上显示登录成功但是网页端没有反应)。并且,在终端里打印出来的二维码与截图获取的二维码并不一样,虽然扫描之后得到 URL 是一样的,但是扫描截图里面的二维码就能够成功登录。有人了解这其中的原因嘛?或者,要如何生成和截图里完全一样的二维码打印到终端里?

    获取二维码截图并打印终端版二维码的函数:

    def print_qr(driver):
        # Get QR code
        path = os.path.join(BASE_DIR, "qrcode.png")
        get_qr_screen_shot(driver, path)
        # Load it to Pillow
        with open(path, 'rb') as image_file:
            image = Image.open(image_file)
            image.load()
        # decode it
        codes = zbarlight.scan_codes('qrcode', image)
        print(codes)
        url = codes[0].decode('utf-8')
        print(url)
        # encode it in text and print it to terminal
        qr = pyqrcode.create(url)
        print(qr.terminal(quiet_zone=1))
    
    15 replies    2016-08-09 21:17:05 +08:00
    loading
        1
    loading  
       Aug 6, 2016 via Android
    直接裁剪截图
    skydiver
        2
    skydiver  
       Aug 6, 2016 via iPad
    二维码里有隐藏信息呗。不一定是标准的 URL
    ladrift
        3
    ladrift  
    OP
       Aug 6, 2016
    的确裁减了截图,最后的`qrcode.png`里面只有二维码的部分。主要问题是,这样生成的二维码和原二维码不完全相同。生成二维码还有哪些其他的决定因素嘛?
    ladrift
        4
    ladrift  
    OP
       Aug 6, 2016
    @skydiver 二维码里还能包含什么信息呢?
    wzxjohn
        5
    wzxjohn  
       Aug 6, 2016 via iPhone
    都截屏了为啥要解读再生成一次?不懂。直接把原图贴出来不就好了?
    二维码应该是没有隐藏信息一说的,感觉是你的二维码在扫描的时候失效了?
    ladrift
        6
    ladrift  
    OP
       Aug 6, 2016
    @wzxjohn
    在本机上的确可以打开图片扫描,但是如果爬虫跑在服务器上就只能通过终端来打印二维码了。

    至于失效的问题,扫描终端里的二维码没有反应,再扫描截图里的二维码就能登录了,应该没有失效的问题。并且从肉眼观测来看截图里的二维码和终端里面的的确不一样。
    ladrift
        7
    ladrift  
    OP
       Aug 6, 2016
    其实要是想完成这个扫描二维码登陆的需求的确还有别的解决方案,我现在疑惑的是,为什么两个二维码会不同,而且扫描后的效果的确不同(一个能登录,一个不能),但是两个二维码解读出来的 URL 确是一样的。不知有没有人了解其中原委。
    skydiver
        8
    skydiver  
       Aug 6, 2016 via iPad
    @wzxjohn 如何证明腾讯没加入隐藏信息?
    skydiver
        9
    skydiver  
       Aug 6, 2016
    @ladrift 这得看腾讯的工程师是不是加入了什么自己的内容了
    skydiver
        10
    skydiver  
       Aug 6, 2016
    二维码是冗余编码,想在里面加入一些信息还是很容易的。
    livelazily
        11
    livelazily  
       Aug 6, 2016
    @skydiver 不直接用 qq 扫,下载第三方的二维码扫描, 然后跳转到 qq 看看登录效果,能登录就是没有加隐藏信息
    ladrift
        12
    ladrift  
    OP
       Aug 6, 2016
    @livelazily 第三方的就会读取出一个 URL ,跳转到浏览器里后就会重定向成 im.qq.com 。(我用的手机相机自带的二维码识别)所以 @skydiver 说的还是很有可能的,看来不能转一遍再生成了,会遗漏信息。
    fcicq
        13
    fcicq  
       Aug 6, 2016
    QR 有四种等级的 EC 码, 和这个有关吗?
    wzxjohn
        14
    wzxjohn  
       Aug 9, 2016
    @skydiver 我按照楼主的方法做成功了。。。算不算一种证明呢。。。
    wzxjohn
        15
    wzxjohn  
       Aug 9, 2016
    使用楼主的代码,测试了登陆 mp.qq.com 没有任何问题。我的代码和楼主代码唯一的不同就是原图是手动右键保存的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2972 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 14:33 · PVG 22:33 · LAX 07:33 · JFK 10:33
    ♥ Do have faith in what you're doing.