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

2016-08-06 15:56:50 +08:00
 ladrift

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

至于失效的问题,扫描终端里的二维码没有反应,再扫描截图里的二维码就能登录了,应该没有失效的问题。并且从肉眼观测来看截图里的二维码和终端里面的的确不一样。
ladrift
2016-08-06 16:13:02 +08:00
其实要是想完成这个扫描二维码登陆的需求的确还有别的解决方案,我现在疑惑的是,为什么两个二维码会不同,而且扫描后的效果的确不同(一个能登录,一个不能),但是两个二维码解读出来的 URL 确是一样的。不知有没有人了解其中原委。
skydiver
2016-08-06 16:51:08 +08:00
@wzxjohn 如何证明腾讯没加入隐藏信息?
skydiver
2016-08-06 17:12:44 +08:00
@ladrift 这得看腾讯的工程师是不是加入了什么自己的内容了
skydiver
2016-08-06 17:13:27 +08:00
二维码是冗余编码,想在里面加入一些信息还是很容易的。
livelazily
2016-08-06 17:33:52 +08:00
@skydiver 不直接用 qq 扫,下载第三方的二维码扫描, 然后跳转到 qq 看看登录效果,能登录就是没有加隐藏信息
ladrift
2016-08-06 17:38:31 +08:00
@livelazily 第三方的就会读取出一个 URL ,跳转到浏览器里后就会重定向成 im.qq.com 。(我用的手机相机自带的二维码识别)所以 @skydiver 说的还是很有可能的,看来不能转一遍再生成了,会遗漏信息。
fcicq
2016-08-06 20:58:52 +08:00
QR 有四种等级的 EC 码, 和这个有关吗?
wzxjohn
2016-08-09 21:14:21 +08:00
@skydiver 我按照楼主的方法做成功了。。。算不算一种证明呢。。。
wzxjohn
2016-08-09 21:17:05 +08:00
使用楼主的代码,测试了登陆 mp.qq.com 没有任何问题。我的代码和楼主代码唯一的不同就是原图是手动右键保存的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/297575

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX