python selenium 扫描二维码登录淘宝
首先说一下,现在其实有一些比较成熟的库可以进行登录,比如说我很早之前的帖子用的是DecryptLogin ->https://www.52pojie.cn/thread-1315931-1-1.html ->https://github.com/CharlesPikachu/DecryptLogin但是呢,有的时候确实是比较想用自己的代码来进行登录,所以呢,就自己写了一个简简单单的获取二维码然后登录的代码。
from selenium import webdriver
bs = webdriver.Chrome()
bs.maximize_window()
bs.get('https://www.taobao.com')
login_btn = bs.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div/div/a')
login_btn.click()
toggleerweima = bs.find_element_by_xpath('//*[@id="login"]/div/i')
toggleerweima.click()
imgurl = './二维码.png'
bs.save_screenshot(imgurl)
EWM = bs.find_element_by_xpath('//*[@id="login"]/div/div/div/div')
topX = EWM.location["x"]*1.25
topY = EWM.location['y']*1.25
print(EWM.size['width'])
bottomX = topX + 170
print(EWM.size['height'])
bottomY = topY + 170
print(topX,topY,bottomX,bottomY)
from PIL import Image
picture = Image.open(imgurl)
picture = picture.crop((topX, topY, bottomX, bottomY))
picture.save(imgurl)
img=Image.open(imgurl)
img.show()
bs.quit()
先贴上我的代码,这里我是用的jupyter notebook写的,用的不是很熟练,所以可能有点丑陋,推荐不要直接复制使用。
前几行代码很好理解,就是先导入selenium里的webdriver,这里说一下怎么装一下webdriver。
首先打开cmd--->pip --version找到Python的安装路径
然后打开谷歌浏览器查看一下浏览器的版本(帮助--->关于Google Chrome)我的是 94.0.4606.71
之后在打开百度搜索Chromedriver taobao,第一个就是(http://npm.taobao.org/mirrors/chromedriver)然后找到自己版本的driver,如果没有对应的话,下载离你版本最近的chromedriver,然后解压后放入Python的路径里。
之后我们打开淘宝,然后找到请登录,然后切换到二维码,再截图,然后用Image对二维码的位置进行截图,然后再将二维码展现出来,之后扫码登录就行了。
说一下重点,就是我之前截取二维码的时候,一直找不到对应的位置,一直是往前一点,往上一点,后来百度查了一下才知道。
这是因为Windows的分辨率不同而导致的。
之所以会出现这个坐标偏差是因为windows系统下电脑设置的显示缩放比例造成的,location获取的坐标是按显示100%时得到的坐标,而截图所使用的坐标却是需要根据显示缩放比例缩放后对应的图片所确定的,因此就出现了偏差。解决这个问题有三种方法1.修改电脑显示设置为100%。这是最简单的方法;2.缩放截取到的页面图片,即将截图的size缩放为宽和高都除以缩放比例后的大小;3.修改Image.crop的参数,将参数元组的四个值都乘以缩放比例。
我是用的将位置进行比例运算,我电脑是125%,所以让坐标*1.25就好了。别的网站也差不多是这样截取二维码的。 骑狗的猴子 发表于 2021-10-10 18:08
我也在学习python发现大佬学的比我深入的多了,你的思路是将登陆时候生成的二维码获取到 在把扫码后的信息 ...
其实我是想做个自动化的脚本,自动爬淘宝或者什么的数据,然后这里麻烦在了登录上,如果设置的是账号密码登录,直接点击就好了,但是要储存密码,这里我自己用无所谓,但是如果发出来的话,万一有人在里面加个发送之类的就不好了,所以就想着把二维码整出来,进行选择呗。
然后再就是二维码是通过截图,然后再定位二维码的位置,之后再对已有的截图进行定位,将二维码截出来,然后让他显示之后你直接扫码就行了,这里可以做一个判断,判断你是否扫码成功,成功就继续执行下面的,不成功就进行分析,比如说二维码过期,或者不想用了,对这些进行判断。 山野村夫-陈墨 发表于 2021-10-11 00:23
其实我第一想法是二维码是一个图片,直接读取图片。看来,我错了。。。。哈哈哈哈。
有点小建议,也是在 ...
所以我说的是别直接抄我的代码啊,哈哈。我当时写的时候就想到了,然后我之所以要在后面+170还是因为比例的问题,你自己尝试一下就会发现加EWM.size['width']会有一部分截不到,这个也是因为比例的原因,后面应该要乘1.25,乘你浏览器的比例。
网页缩放比例没啥关系,主要是因为你电脑的缩放比例,比如说笔记本一般都是125%的比例,台式是100%等等。具体的还是要你自己尝试一下。
我这也就是写了一个头,其余的还需要大哥们的补充!{:301_978:} Python学一学! 我也在学习python发现大佬学的比我深入的多了,你的思路是将登陆时候生成的二维码获取到 在把扫码后的信息发送到后端吗 其实我第一想法是二维码是一个图片,直接读取图片。看来,我错了。。。。哈哈哈哈。
有点小建议,也是在你的基础上动动手脚:
(1) 二维码大小动态:
topX = EWM.location["x"]*1.25
topY = EWM.location['y']*1.25
bottomX = topX + EWM.size['width']# 获取二维码大小增加。(你是170, 我这儿是130,其他人可能是140,哈哈哈)
bottomY = topY + EWM.size['height']
(2)浏览器网页缩放比例,可以想办法获取:document.body.style.zoom 学习一下。、 现在淘宝都把淘宝助理停了服务器了,所以现在上传麻烦了。很多店主要上传几百上千的sku,超级麻烦。 py正在努力中 MrBart 发表于 2021-10-11 01:20
现在淘宝都把淘宝助理停了服务器了,所以现在上传麻烦了。很多店主要上传几百上千的sku,超级麻烦。
如果只是说上传每次需要点击选择之类的麻烦,完全可以自己写个自动化的脚本来上传,当然如果是要什么验证之类的麻烦的话,那也只能自己操作咯。
页:
[1]
2