如何生成完全一样的二维码( QR code)? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ladrift
V2EX    问与答

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

  •  
  •   ladrift 2016-08-06 15:56:50 +08:00 6644 次点击
    这是一个创建于 3421 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在弄一个 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 条回复    2016-08-09 21:17:05 +08:00
    loading
        1
    loading  
       2016-08-06 16:00:07 +08:00 via Android
    直接裁剪截图
    skydiver
        2
    skydiver  
       2016-08-06 16:00:45 +08:00 via iPad
    二维码里有隐藏信息呗。不一定是标准的 URL
    ladrift
        3
    ladrift  
    OP
       2016-08-06 16:02:46 +08:00
    的确裁减了截图,最后的`qrcode.png`里面只有二维码的部分。主要问题是,这样生成的二维码和原二维码不完全相同。生成二维码还有哪些其他的决定因素嘛?
    ladrift
        4
    ladrift  
    OP
       2016-08-06 16:05:03 +08:00
    @skydiver 二维码里还能包含什么信息呢?
    wzxjohn
        5
    wzxjohn  
       2016-08-06 16:06:20 +08:00 via iPhone
    都截屏了为啥要解读再生成一次?不懂。直接把原图贴出来不就好了?
    二维码应该是没有隐藏信息一说的,感觉是你的二维码在扫描的时候失效了?
    ladrift
        6
    ladrift  
    OP
       2016-08-06 16:10:00 +08:00
    @wzxjohn
    在本机上的确可以打开图片扫描,但是如果爬虫跑在服务器上就只能通过终端来打印二维码了。

    至于失效的问题,扫描终端里的二维码没有反应,再扫描截图里的二维码就能登录了,应该没有失效的问题。并且从肉眼观测来看截图里的二维码和终端里面的的确不一样。
    ladrift
        7
    ladrift  
    OP
       2016-08-06 16:13:02 +08:00
    其实要是想完成这个扫描二维码登陆的需求的确还有别的解决方案,我现在疑惑的是,为什么两个二维码会不同,而且扫描后的效果的确不同(一个能登录,一个不能),但是两个二维码解读出来的 URL 确是一样的。不知有没有人了解其中原委。
    skydiver
        8
    skydiver  
       2016-08-06 16:51:08 +08:00 via iPad
    @wzxjohn 如何证明腾讯没加入隐藏信息?
    skydiver
        9
    skydiver  
       2016-08-06 17:12:44 +08:00
    @ladrift 这得看腾讯的工程师是不是加入了什么自己的内容了
    skydiver
        10
    skydiver  
       2016-08-06 17:13:27 +08:00
    二维码是冗余编码,想在里面加入一些信息还是很容易的。
    livelazily
        11
    livelazily  
       2016-08-06 17:33:52 +08:00
    @skydiver 不直接用 qq 扫,下载第三方的二维码扫描, 然后跳转到 qq 看看登录效果,能登录就是没有加隐藏信息
    ladrift
        12
    ladrift  
    OP
       2016-08-06 17:38:31 +08:00
    @livelazily 第三方的就会读取出一个 URL ,跳转到浏览器里后就会重定向成 im.qq.com 。(我用的手机相机自带的二维码识别)所以 @skydiver 说的还是很有可能的,看来不能转一遍再生成了,会遗漏信息。
    fcicq
        13
    fcicq  
       2016-08-06 20:58:52 +08:00
    QR 有四种等级的 EC 码, 和这个有关吗?
    wzxjohn
        14
    wzxjohn  
       2016-08-09 21:14:21 +08:00
    @skydiver 我按照楼主的方法做成功了。。。算不算一种证明呢。。。
    wzxjohn
        15
    wzxjohn  
       2016-08-09 21:17:05 +08:00
    使用楼主的代码,测试了登陆 mp.qq.com 没有任何问题。我的代码和楼主代码唯一的不同就是原图是手动右键保存的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3823 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:58 PVG 08:58 LAX 16:58 JFK 19:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86