实验程序
from PIL import Image
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
import random
def main():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F')
input_name = driver.find_element_by_id('LoginName')
input_name.send_keys('tianxinxin')
time.sleep(1)
input_pwd = driver.find_element_by_id('Password')
input_pwd.send_keys('tianxinxin6666')
time.sleep(2)
login_submit = driver.find_element_by_class_name('ladda-label')
login_submit.click()
time.sleep(2)
image1 = get_image1(driver)
image2 = get_image2(driver)
distance = get_distance(image1, image2)
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)
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(100)
def get_image1(driver):
time.sleep(2)
js_code = '''
var x = document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display = "block";
'''
driver.execute_script(js_code)
image = cut_image(driver)
return image
def get_image2(driver):
time.sleep(2)
js_code = '''
var x = document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display = "none";
'''
driver.execute_script(js_code)
image = cut_image(driver)
return image
def cut_image(driver):
driver.save_screenshot('snap.png')
image = driver.find_element_by_class_name('geetest_canvas_img')
left = image.location['x']
top = image.location['y']
right = left + image.size['width']
buttom = top + image.size['height']
image_obj = Image.open('snap.png')
img = image_obj.crop((left, top, right, buttom))
return img
def get_distance(image1, image2):
start = 60
num = 60
for x in range(start, image1.size[0]):
for y in range(image1.size[1]):
rgb1 = image1.load()[x, y]
rgb2 = image2.load()[x, y]
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):
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 = [2,4,6,8]
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)
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}
if __name__ == '__main__':
main()