from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from PIL import Image
import random
def cut_image(driver):
#获取整个页面图片,图片名字为:‘snap.png‘
driver.save_screenshot(‘snap.png‘)
# 获取滑动小图片
image = driver.find_element_by_class_name(‘geetest_canvas_img‘)
print(image.location)
print(image.size)
# 获取小图片的左上右下的位置
left = image.location[‘x‘]
top = image.location[‘y‘]
right = left + image.size[‘wIDth‘]
button = top + image.size[‘height‘]
print(left,top,right,button)
#调用open方法打开全屏图片并赋值给image_obj对象
image_obj = Image.open(‘snap.png‘)
# 通过image_obj对象对小图片进行截取
# 传个元祖,按顺序(左,上,右,下)
img = image_obj.crop((left,button))
#img.show()
return img
def get_image1(driver):
time.sleep(2)
# 修改document文档树,把完整的图片display属性修改为block
Js_code = ‘‘‘
var x = document.getElementsByClassname(‘geetest_canvas_fullbg‘)[0].style.display = "block";
‘‘‘
# 执行Js代码
driver.execute_script(Js_code)
image = cut_image(driver)
return image
def get_image2(driver):
time.sleep(2)
# 修改document文档树,把完整的图片display属性修改为block
Js_code = ‘‘‘
var x = document.getElementsByClassname(‘geetest_canvas_fullbg‘)[0].style.display = "none";
‘‘‘
# 执行Js代码
driver.execute_script(Js_code)
image = cut_image(driver)
return image
def get_distance(image1,image2):
# 小滑块右侧位置
start = 60
# 像素差
num = 60
for x in range(start,image1.size[0]):
for y in range(image1.size[1]):
# 获取imag1完整图片的每一个坐标的像素点
rgb1 = image1.load()[x,y]
# 获取imag2缺口图片的每一个坐标的像素点
rgb2 = image2.load()[x,y]
print(rgb1,rgb2)
# abs获取绝对值,像素点比较的值
r= abs(rgb1[0] - rgb2[0])
g= abs(rgb1[1] - rgb2[1])
b= abs(rgb1[2] - rgb2[2])
# 如果条件成立,则找到缺口位置
if not(r<num and g<num and b<num):
# 有误差 -7
return x-7
def get_strck_move(distance):
distance += 20
# 初速度
v0 = 0
# 时间
t = 0.2
# 位置
s=0
# 滑动轨迹列表
move_List = []
# 中间值,作为加减速度的位置
mID = distance / 5 * 3
# 加减速度列表
v_List = [1,2,3,4]
while s< distance:
if s< mID:
a = v_List[random.randint(0,len(v_List)-1)]
else:
a = -v_List[random.randint(0,len(v_List) - 1)]
# 获取初始速度
v = v0
# 路程公式:
s1 = v * t + 0.5 * a * (t ** 2)
s1 = round(s1) # 取整
# 加速公式:
# v = v0 + a * t
m_v = v + a * t
# 把当前加/减速度赋值给初始速度,以便下一次计算
v0 = m_v
# 把位移添加到滑动列表中
move_List.append(s1)
# 修改滑动初始距离
s += s1
# 后退列表,自定义后退滑动轨迹
back_List = [-1,-1,-2,-3,-1]
return {‘move_List‘: move_List,‘back_List‘: back_List}
def main():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(‘https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F‘)
user_input = driver.find_element_by_ID(‘Loginname‘)
user_input.send_keys(‘lyj68‘)
time.sleep(0.2)
pwd_input = driver.find_element_by_ID(‘Password‘)
pwd_input.send_keys(‘1998223689lyj‘)
time.sleep(2)
login_submit = driver.find_element_by_ID(‘submitBtn‘)
login_submit.click()
# 获取完整图片
image1 = get_image1(driver)
# 获取有缺口图片
image2 = get_image2(driver)
# 比较两张图片,获取滑动距离
distance = get_distance(image1,image2)
print(distance)
#模拟人的滑动轨迹
move_dict = get_strck_move(distance)
move_List = move_dict[‘move_List‘]
back_List = move_dict[‘back_List‘]
# 滑动开始
move_tag = driver.find_element_by_class_name(‘geetest_slIDer_button‘)
ActionChains(driver).click_and_hold(move_tag).perform()
for move in move_List:
ActionChains(driver).move_by_offset(xoffset=move,yoffset=0).perform()
time.sleep(0.1)
for back in back_List:
ActionChains(driver).move_by_offset(xoffset=back,yoffset=0).perform()
time.sleep(0.1)
# 制作微妙晃动
ActionChains(driver).move_by_offset(xoffset=3,yoffset=0).perform()
ActionChains(driver).move_by_offset(xoffset=-3,yoffset=0).perform()
time.sleep(0.1)
ActionChains(driver).release().perform()
time.sleep(10)
if __name__ == ‘__main__‘: main()
总结以上是内存溢出为你收集整理的day7全部内容,希望文章能够帮你解决day7所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)