python登录京东滑动验证_selenium登录 京东滑动验证码

from selenium importwebdriverfrom selenium.webdriver importActionChainsfrom selenium.webdriver.common.by importByfrom selenium.webdriver.support.ui importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECfrom PIL importImageimporttimeimportrandomdefif_is_s(img_1, img_2):#判断是不是跟比较的是一张图

a=0for i in range(1, img_1.size[1]):for j in range(1, 3):

rgb1=img_1.load()[i, j]

rgb2=img_2.load()[i, j]

res1= abs(rgb1[0] -rgb2[0])

res2= abs(rgb1[1] - rgb2[1])

res3= abs(rgb1[2] - rgb2[2])if res1 < 10 and res2 < 10 and res3 < 10:

a+= 1

else:

a=0if a > 50:returnTruereturnFalsedefget_distance(image1,image2):#找出需要滑动的距离

a=0

threshold=60left=57

for i inrange(left,image1.size[0]):for j in range(image1.size[1]):

rgb1=image1.load()[i,j]

rgb2=image2.load()[i,j]

res1=abs(rgb1[0]-rgb2[0])

res2=abs(rgb1[1]-rgb2[1])

res3=abs(rgb1[2]-rgb2[2])if not (res1 < threshold and res2 < threshold and res3

a+= 1

return i+20

return i+20

defget_tracks(distance):#这是滑动轨迹的,京东的滑动轨迹很恶心,这个也是有时可以有时不行

tracks=[]

current=0

mid= distance * 4 / 5t= 0.2v=0while current

a= random.uniform(2, 5)else:

a= -(random.uniform(12.5, 13.5))

v0=v

v= v0 + a *t

x= v0 * t + 1 / 2 * a * (t ** 2)

current+=xif 0.6 < current - distance < 1:

x= x - 0.53tracks.append(round(x,2))elif 1 < current - distance < 1.5:

x= x - 1.4tracks.append(round(x,2))elif 1.5 < current - distance < 3:

x= x - 1.8tracks.append(round(x,2))else:

tracks.append(round(x,2))if sum(tracks) >distance:

i= sum(tracks) -distance

tracks[-1] = round(tracks[-1] - i, 2)

i= random.uniform(1, 3)

i= round(i, 2)

zz= random.uniform(0.1, 0.3)

tracks[-1] = round(tracks[-1] + i, 2)

i= round(i - zz, 2)

tracks.append(-i)if sum(tracks)

si= distance -sum(tracks)

tracks.append(round(si,2))print(tracks, sum(tracks))returntracksif __name__=='__main__':

browser=webdriver.Firefox()

browser.get('https://passport.jd.com/new/login')

butt= WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CLASS_NAME,'link-login')))

butt.click()

butt= WebDriverWait(browser,10).until(EC.presence_of_element_located((By.XPATH,'//a[@clstag="pageclick|keycount|login_pc_201804112|10"]')))

butt.click()

user= WebDriverWait(browser,10).until(EC.presence_of_element_located((By.ID,'loginname')))

password= WebDriverWait(browser,10).until(EC.presence_of_element_located((By.ID,'nloginpwd')))

user.send_keys('xxx')

time.sleep(2)

password.send_keys('xxx')

izsz= 1

while izsz == 1:#无限循环直到登录成功try:

button= WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CLASS_NAME,'btn-img.btn-entry')))

time.sleep(2)

button.click()

time.sleep(2)

browser.save_screenshot('1.png')#截图

page_snap_obj= Image.open('1.png')

img= WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CLASS_NAME,'JDJRV-bigimg')))

local=img.location

size=img.size

top= local['y']

bottom= local['y'] + size['height']

left= local['x']

right= local['x'] + size['width']

img_1= Image.open('index2.png')

img_2=page_snap_obj.crop((left, top, right, bottom))#裁剪图片尺寸

img_2.save('2.png')#保存

i=if_is_s(img_1,img_2)#判断是不是一张图,不是点击换一张while noti:

time.sleep(2)

butt= WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CLASS_NAME,'JDJRV-img-refresh')))

butt.click()

time.sleep(2)

browser.save_screenshot('1.png')

page_snap_obj= Image.open('1.png')

img= WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'JDJRV-bigimg')))

local=img.location

size=img.size

top= local['y']

bottom= local['y'] + size['height']

left= local['x']

right= local['x'] + size['width']

img_1= Image.open('index2.png')

img_2=page_snap_obj.crop((left, top, right, bottom))

img_2.save('2.png')

time.sleep(2)

i=if_is_s(img_1, img_2)

ji=get_distance(img_1, img_2)print(ji)

tracks=get_tracks(ji)

ijs= len(tracks)//5*3tracks1=tracks[:ijs]#对滑动轨迹继续改变

tracks2=tracks[ijs:]

z=sum(tracks1)

tracks2.insert(0,z)

tracks2.insert(0,0)

button= WebDriverWait(browser,10).until(EC.presence_of_element_located((By.XPATH, '//div[@class="JDJRV-slide-inner JDJRV-slide-btn"]')))

ActionChains(browser).click_and_hold(button).perform()for track intracks:

ActionChains(browser).move_by_offset(xoffset=track, yoffset=0).perform()

time.sleep(0.5) #0.5秒后释放鼠标

ActionChains(browser).release().perform()

url=browser.current_urlif 'https://passport.jd.com/new/login.aspx?' instr(url):

izsz= 1

else:

izsz=0except:

izsz= 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值