selenium截取图片到的位置和实际不同问题

from PIL import Image,ImageGrab from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from collections import Counter import time

二值化

def sharp(image): w, h = image.size tem = 0 for i in range(w): for j in range(h): tem += image.getpixel((i, j))

pixel_ave = tem / w / h
for i in range(w):
    for j in range(h):
        p = image.getpixel((i, j))
        if p > pixel_ave:
            image.putpixel((i, j), 255)
        else:
            image.putpixel((i, j), 0)

return image

#获得图片的像素点集 def getPointList(i, j, Range): for x in range(i - Range, i + Range + 1): for y in range(j - Range, j + Range + 1): if x == i and y == j: continue yield (x, y)

降噪

def reduceNoise(image): w, h = image.size Range = 3 f = 0.05 for i in range(w): for j in range(h): if i < w * f or i > w * (1 - f) or j < h * f or j > h * (1 - f): image.putpixel((i, j), 255) p = image.getpixel((i, j)) if p < 100: count = 0

for x, y in getPointList(i, j, Range):
                if image.getpixel((x, y)) < 100:
                    count += 1
            if count < 0.5 * (Range * 2 + 1) ** 2 - 1:
                image.putpixel((i, j), 255)
return image

#判断是不是跟比较的是一张图 def if_is_s(img_1, img_2): a = 0 for i in range(1,img1.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 = 0 if a > 50: return True return False #计算滑动块和缺块之间的距离 def calDistance(image): w,h=image.size ls=[] for i in range(40,w-40): for j in range(10,h): #说明黑点 if image.getpixel((i,j))<100: #计算这个点右侧40个点中,有多少个黑点 count=0 for k in range(i,i+40): if image.getpixel((k,j))<100: count+=1 else: break if count>36: ls.append(i) return Counter(ls).most_common(1)[0][0] #计算轨迹 def get_ls(distance): ls=[1,2] #移动轨迹为2的倍数的等比数列,为防止移动轨迹太大,再超过32时,设置为32 while 1: delta_s=ls[-1]2 if delta_s>32: delta_s=32 ls.append(delta_s) if sum(ls)>distance1.1: break #移动轨迹超出预定值后,倒退 a=distance-sum(ls) for i in range(0,4): ls.append(int(a/4)) b=distance-sum(ls) ls.append(b) return ls

这是通过selenium截取的图img1: 这是通过获取到图片坐标后截取的img2: 我们得到的滑动验证码的位置是:x=815,y=230

然后我们根据在网页上实际测量得到滑动验证码的位置大约在:x=1205,y=280的位置,所以我们未得到相应的滑动验证码图片与我们保存的滑动验证码图片比较。

经验分享 程序员 微信小程序 职场和发展