python 初学者一开始就挑战京东的滑动验证码的话,难度有点大,我也是研究了好久,不是图片问题就是代码问题,还有初学者遇到的各种问题(都能让人纠结半天),比如少打个括号、少打:、没有缩进等等。最后还是在大神的代码基础上稍微改了点才能低概率通过(。。。。)
废话不多说了,共两类代码,第一类采用的是完整原图,第二类采用的是缺口原图(进行灰度、二值化处理),最后结果是:第一类代码因为轨迹问题,始终通过不了,当然距离位置也与实际存在挺大区别;第二类原始代码因为轨迹问题通过不了,本人稍微加了两行代码,最后低概率通过(运气好的话2~3次就能通过)(超过10次,建议退出后再试)【我觉得可能是距离位置与实际存在较大误差的原因】,下面直接上代码。
第一类代码:
转载和参考链接为,如有漏的请告知:
https://blog.youkuaiyun.com/qq_39802740/article/details/83584980
https://blog.youkuaiyun.com/qq_38685503/article/details/81187105
https: // blog.youkuaiyun.com / qq_42709514 / article / details / 81975918
from PIL import Image
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time,random
#补判断模块
from selenium.webdriver.support import expected_conditions as EC #判断元
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
def get_image(browser):
time.sleep(2)
bigimg_element = browser.find_element_by_xpath('//div/div[@class="JDJRV-bigimg"]') #没高度 可能需要一点反应时间,time.sleep(2)
time.sleep(2)
bigsize = bigimg_element.size #上一行少1个括号都会出现 invalid syns
biglocation = bigimg_element.location
bigleft = biglocation['x']
bigtop = biglocation['y']
bigright = bigleft + bigsize['width']
bigbottom = bigtop + bigsize['height']
print(bigsize) #文中多处print只是为了验证程序是否能正常运行和得到一些参数值供判断(比如缺口距离print(loc))
print(bigsize['width'])
print(bigsize['height'])
time.sleep(1)
print(bigleft, bigtop, bigright, bigbottom)
browser.save_screenshot('D:\quekou.png')
snap_obj = Image.open('D:\quekou.png')
print(snap_obj.size) #起验证作用
time.sleep(2)
img_obj = snap_obj.crop((bigleft, bigtop, bigright, bigbottom)) #什么用?
# img_obj.save('D:\orimg.png')
# img_obj.show()
image = img_obj #如果这个位置是image=get_image(browser)会导致循环
time.sleep(2)
ad = match_source(image)
time.sleep(2)
visualstack = get_diff_location(ad, image)
loc = visualstack
print(loc)
time.sleep(2)
track_list = get_track7(loc)
time.sleep(2)
s