확인 슬라이딩 [파이썬] B 국 로그인

아이디어 :
배경 슬라이드 구하는 1. (슬라이드 모듈 스테이션 B의 위치는 고정되지 않고, 다른 소스는 기록 사이클 정지 화상 취득 그렇다면, PS가 정확하게 얻어 접합 어떤 사진을하지 밝혀졌다 배경도.
2. 오리지널 배경 분석과의 이동 거리를 확인하기 위해 배경 픽셀 갭 슬라이드 처리 모듈 (X)은 축
(3), 변위 슬라이드 모듈을 이용하여 수식을 정상 궤도 획득
4. 파이썬 + 셀레늄 아날로그 완료 인력을 마우스 드래그
5. 완전한 휴식

from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import os
from PIL import Image
from selenium.webdriver import ActionChains
import random
 
 
def get_snap(driver):
    driver.save_screenshot('snap.png')
    snap_obj = Image.open('snap.png')
    return snap_obj
 
 
def get_image(driver):
    image = driver.find_element_by_class_name('geetest_canvas_slice')
    time.sleep(1)
    size = image.size
    location = image.location
    left = location['x']
    top = location['y']
    right = left + size['width']
    bottom = top + size['height']
    snap_obj = get_snap(driver)
    img_obj = snap_obj.crop((left, top, right, bottom))
    img_obj.save('image1.png')
    for i in range(1, 11):
        image2 = Image.open('bilibili_image/image{}.png'.format(str(i)))
        rgb = (image2.load()[58, 20])
        rgb2 = (img_obj.load()[58, 20])
        if rgb[0]==rgb2[0] and rgb[1]==rgb2[1] and rgb[2]==rgb2[2]:
            img_obj.save('image1.png')
            return img_obj, image2
 
 
def find_jl(image_obj1, image_obj2):
    start_x = 58
    # 从坐标系(60,25开始往下扫描)
    start_y = 20
    for x in range(start_x, image_obj1.size[0]):
        for y in range(start_y, image_obj1.size[1] - 16):
            rgb = image_obj1.load()[x, y]
            rgb2 = image_obj2.load()[x, y]
            if abs(rgb[0] - rgb2[0]) > 60 and abs(rgb[1] - rgb2[1]) > 60 and abs(rgb[2] - rgb2[2]) > 60:
                # print(rgb)
                return x - 6
 
 
def get_tracks(distance):
    distance += 10
    # v = V0+a*t
    # S = v*t+0.5*a*(t**2)
    v0 = 0
    s = 0
    t = 0.2
    mid = distance * 3 / 5
    forward_tracks = []
    back_tracks = [0, -1, -1, -1, -2, -2, -2, -1, -1, 0, 0, 1]
    while s < distance:
        if s < mid:
            a = 2
        else:
            a = -3
        v = v0
        track = v * t + 0.5 * a * (t ** 2)
        track = round(track)
        v0 = v + a * t
        s += track
        forward_tracks.append(track)
    return forward_tracks, back_tracks
 
 
def RUN(driver, track):
    slider_button = driver.find_element_by_class_name('geetest_slider_button')
    ActionChains(driver).click_and_hold(slider_button).perform()
    time.sleep(0.3)
    for i in track[0]:
        ActionChains(driver).move_by_offset(xoffset=i, yoffset=0).perform()
    time.sleep(0.2)
    for j in track[1]:
        ActionChains(driver).move_by_offset(xoffset=j, yoffset=0).perform()
    time.sleep(0.3)
    ActionChains(driver).release().perform()
 
 
def main(user_id, password):
    os.system("taskkill /f /im chromedriver.exe")
    url = 'https://passport.bilibili.com/login'
    driver = webdriver.Chrome()
    # 1.登录页面
    # driver = webdriver.Chrome()
    timeout = WebDriverWait(driver, 3)
    driver.get(url)
    # 2.输入公司名称,点击查询
    timeout.until(EC.element_to_be_clickable((By.ID, 'login-username')))
    user_button = driver.find_element_by_id('login-username')
    user_button.send_keys(user_id)
    time.sleep(random.uniform(0, 1))
    password_button = driver.find_element_by_id('login-passwd')
    password_button.send_keys(password)
    login_button = driver.find_element_by_class_name('btn-login')
    login_button.click()
    time.sleep(1)
    # 3.得到滑动图片
    # for i in range(100):
    #     if i >= 1:
    #         driver.find_element_by_class_name('geetest_panel_error_content').click()
    #         time.sleep(1)
    #     for j in range(5):
    #         get_image(driver, str(i)+str(j))
    #         time.sleep(0.5)
    #         driver.find_element_by_class_name('geetest_refresh_1').click()
    #         time.sleep(1)
    image_obj = get_image(driver)
    # 4.计算滑动距离
    distance = find_jl(image_obj[0], image_obj[1])
    # 5.通过动力加速度算法,算出人手滑动轨迹
    track = get_tracks(distance)
    # 6.执行
    RUN(driver, track)
    # 7.关闭浏览器
    time.sleep(5)
    driver.close()
 
 
if __name__ == '__main__':
    user_id = 'a123456'
    password = 'b123456'
    main(user_id, password)

추천

출처www.cnblogs.com/Study-Csharp/p/12564129.html