selenium模擬登錄QQ空間

利用selenium進行QQ空間模擬登錄以及滑動驗證

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import user_msg


def wait(driver, xpath):
    """等待頁面某個元素加載完畢!"""
    while True:  # 等待頁面加載完畢
        time_number = 0
        iframe = driver.find_element_by_xpath(xpath=xpath)  # 定位iframe 元素
        if iframe:
            return iframe
        else:
            time.sleep(0.5)
            time_number += 0.5
            if time_number > 5:
                raise Exception("TimeOut")


driver = webdriver.Chrome()  # 打開瀏覽器
driver.get("https://qzone.qq.com/")  # 訪問頁面
# 等待頁面某個元素加載完畢!selenium中的方法。
# iframe = WebDriverWait(driver=driver, timeout=5).until(EC.presence_of_element_located((By.XPATH, '//iframe')))
iframe = wait(driver=driver, xpath='//iframe')
driver.switch_to_frame(iframe)  # 切換到iframe
driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()  # 定位“賬號密碼登錄”元素
time.sleep(2)
user_input = driver.find_element_by_xpath('//*[@id="u"]')  # 定位賬號輸入框
user_input.clear()  # 清除內容
user_input.send_keys(user_msg.user)  # 輸入賬號
time.sleep(1)
password_input = driver.find_element_by_xpath('//*[@id="p"]')  # 定位密碼輸入框
password_input.clear()  # 清空內容
password_input.send_keys(user_msg.password)  # 輸入密碼
time.sleep(1)
login_button = driver.find_element_by_xpath('//*[@id="login_button"]')  # 定位登陸按鈕
login_button.click()  # 點擊登錄按鈕
time.sleep(3)
iframe = wait(driver=driver, xpath='//iframe')  # 定位 iframe
driver.switch_to_frame(iframe)  # 切換到 iframe
time.sleep(2)
test_button = driver.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]')  # 定位滑動塊
action = ActionChains(driver)  # 實例一個動作鏈對象
# action對象調用的所有動作(方法),都會按照被調用的先後順序存儲到一個隊列中
action.click_and_hold(test_button).perform()  # perform表示執行所有動作
action.reset_actions()  # 重置動作
time.sleep(1)
action.move_by_offset(170, 0).perform()  # 向右滑動170px
action.release().perform()  # 鬆開滑動塊

還有很多改進的地方,比如:滑動距離(軌跡)不對,導致驗證失敗。可以設置一個循環,驗證失敗後自動調整滑動距離,再次滑動,直到驗證成功。

發佈了96 篇原創文章 · 獲贊 36 · 訪問量 6186
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章