import time
from selenium import webdriver
from selenium.webdriver import ActionChains
def get_track(distance):
track = [] # 声明一个列表
current = 0 # 当前位置
mid = distance * 3 / 4 # 当移动到轨迹全长的四分之三时速度达到最大
t = 0.2 # 加速时间间隔
v = 0 # 初始化移动速度
while current < distance: # 当前位置未到达终点时持续改变运动速度
if current < mid: # 当速度达到最大速度之前,加速度为2,持续加速
a = 2
else: # 当速度达到最大速度之后,加速度为-3,开始减速,保证到达终点时速度为0
a = -3
v0 = v # 初始化初始速度
v = v0 + a * t # 加速
move = v0 * t + 1 / 2 * a * t * t # 计算每个单位t时间内移动的距离
current += move # 将每个单位时间内的移动距离相加计算,当前移动的距离
track.append(round(move)) # 将单位时间内移动的距离四舍五入取整并存储在列表中
return track # 返回不同速度下单位时间内移动距离的列表
def main():
driver = webdriver.Firefox()
# driver.implicitly_wait(10)
driver.get(r'【网址】')
driver.find_element_by_xpath('/html/body/div[2]/div/div/div[1]/a[2]/span').click()
driver.find_element_by_xpath('//*[@id="userName"]').clear() # xpath参数使用单引号
driver.find_element_by_xpath('//*[@id="userName"]').send_keys('【账户】')
driver.find_element_by_id('password').clear()
driver.find_element_by_id('password').send_keys('【密码】')
try:
button = driver.find_element_by_xpath('//*[@id="siller1_dt_child_content_containor"]/div[3]') # 找到“蓝色滑块”
# 开始拖动 perform()用来执行ActionChains中存储的行为
flag = 0
distance = 274
offset = 0
times = 0
while 1:
action = ActionChains(driver)
action.click_and_hold(button).perform()
action.reset_actions() # 清除之前的action
print (distance)
track = get_track(distance)
for i in track:
action.move_by_offset(xoffset=i, yoffset=0).perform()
action.reset_actions()
time.sleep(1)
action.release().perform()
time.sleep(2)
# 判断某元素是否被加载到DOM树里,并不代表该元素一定可见
try:
alert = driver.find_element_by_xpath('//*[@id="dt_notice"]').text
except Exception as e:
print('get alert error: %s' % e)
alert = ''
if alert == '验证通过':
print('滑块验证通过')
flag = 1
driver.switch_to.parent_frame() # 验证成功后跳回最外层页面
break
else:
print(u'滑块位移需要调整: %s' % alert)
distance -= offset
times += 1
time.sleep(2)
# action.move_by_offset(274, 0).perform() # 移动滑块
except:
print("无滑块验证")
driver.find_element_by_xpath('//*[@id="submit"]').click()
time.sleep(2)
# try:
i = 0
while i < 2:
driver.find_element_by_name("lqzx_home_independent_nowget").click()
time.sleep(2)
driver.refresh()
i += 1
# except:
# print("登录不成功")
# 获得cookie信息
cookie = driver.get_cookies()
# 将获得cookie的信息打印
print(cookie)
driver.quit()
if __name__ == '__main__':
main()