首页 > 编程语言 > 详细

python第七课

时间:2019-06-22 00:58:46      阅读:150      评论:0      收藏:0      [点我收藏+]
from selenium import  webdriver
from selenium.webdriver import  ActionChains
from PIL import Image
import time
import random

#截取图片
def cut_image(driver):
    #获取整个页面图片,图片名字为1
    driver.save_screenshot(1.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]
    buttom=top+image.size[height]

    print(left, top, right, buttom)

    #打开调用open方法打开全屏图片复制给image——oj对象
    image_obj=Image.open(1.png)


    #通过image_oj对象对小图片进行截取
    img=image_obj.crop((left, top, right, buttom))
    img.show()

    return img

def get_image2(driver):

    #修改document文档树,把完整图片的disp属性修改成block
    time.sleep(2)
    js_code=‘‘‘
    var x=document.getElementsByClassName(‘geetest_canvas_fullbg‘)[0].style.display=‘none‘;            
    ‘‘‘#class
    driver.execute_script(js_code)

    #截取图片
    image = cut_image(driver)

    return image




def get_image1(driver):

    #修改document文档树,把完整图片的disp属性修改成block
    time.sleep(2)
    js_code=‘‘‘
    var x=document.getElementsByClassName(‘geetest_canvas_fullbg‘)[0].style.display=‘block‘;            
    ‘‘‘#查找class属性要用elements
    driver.execute_script(js_code)
    #截取图片
    image = cut_image(driver)

    return image

#获取滑动距离
def get_distance(image1,image2):
    #小滑块右侧位置
    start=60

    #像素差
    num=60

    #循环所有x轴,看返回值
    for x in range(start, image1.size[0]):
        for y in range(image1.size[1]):
            #获取image1图片的每一个像素点
            rgb1=image1.load()[x, y]

            # 获取image2缺口图片的每一个像素点
            rgb2 = image2.load()[x, y]

            #abs获取绝对值,像素点比较的值
            r = abs(rgb1[0]-rgb2[0])
            g = abs(rgb1[1]-rgb2[1])
            b = abs(rgb1[2]-rgb2[2])

            #如果条件成立则找到缺口
            if r<num and g<num and b<num:
                #有误差7
                return x-7

#模拟人的滑动轨迹
def get_strck_move(distance):
    distance +=20
    ‘‘‘
    滑动行为轨迹
    加速公式:
    v=v0+a*t
    
    路程公式:
    s = v0*t+0.5*a*t^2
    ‘‘‘
    #初速度
    v0=0

    #时间
    t=0.2

    #位移
    s=0

    #滑动轨迹的列表
    move_list=[]

    #中间值,作为加减速的位置
    mid= distance/5*3

    #加点速列表
    v_list=[1, 1, 2, 1]

    #循环位移
    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*t
        s1=round(s1) #取整

        #把位移添加到滑动列表中
        move_list.append(s1)
        #修改滑动初始距离
        s +=s1
        m_v = v + a * t

        #把当前加减速度赋值给初始速度,以便下一次计算
        v0=m_v


    back_list=[-1, -2, -1, -2, -1, -2, -1, -2, -2, -1]

    return {move_list:move_list, back_list:back_list}




def main():
    driver = webdriver.Chrome(rE:\python\chromedriver_win32\chromedriver.exe)
    driver.get(https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F)


    #1、输入用户名与密码,并点击登录
    user_input=driver.find_element_by_id(LoginName)
    user_input.send_keys(amf)
    time.sleep(0.2)


    pwd_input=driver.find_element_by_id(Password)
    pwd_input.send_keys(123456li.)
    time.sleep(2)




    login_submit=driver.find_element_by_id(submitBtn)
    login_submit.click()

    #2、获取完整图片
    image1=get_image1(driver)


    #3、获取有缺口图片
    image2=get_image2(driver)


    #4、比对两种图片,获取滑动距离
    distance=get_distance(image1, image2)
    print(distance)


    #5、模拟人的滑动轨迹
    move_dict=get_strck_move(distance)
    #获取前进滑动轨迹
    move_list=move_dict[move_list]
    #获取后退滑动轨迹
    back_list=move_dict[back_list]

    #6开始滑动
    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()

小结:我觉得这个特别好玩,还是有一点理解上面的问题,不是特别的懂,我觉得tank今天又是帅气的一天

python第七课

原文:https://www.cnblogs.com/lmff/p/11067328.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!