python实训日志_Python实训day7

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,top,right,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

# 有误差 -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,-2,-1,-1,-2,-3,-2,-1,-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()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值