首先说一下,现在其实有一些比较成熟的库可以进行登录,比如说我很早之前的帖子用的是DecryptLogin ->https://www.52pojie.cn/thread-1315931-1-1.html ->https://github.com/CharlesPikachu/DecryptLogin
但是呢,有的时候确实是比较想用自己的代码来进行登录,所以呢,就自己写了一个简简单单的获取二维码然后登录的代码。
[Python] 纯文本查看 复制代码 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[1]/div[1]/a[1]')
login_btn.click()
toggleerweima = bs.find_element_by_xpath('//*[@id="login"]/div[1]/i')
toggleerweima.click()
imgurl = './二维码.png'
bs.save_screenshot(imgurl)
EWM = bs.find_element_by_xpath('//*[@id="login"]/div[2]/div/div[1]/div[1]')
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就好了。别的网站也差不多是这样截取二维码的。 |