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()