溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python2.7+selenium2實(shí)現(xiàn)淘寶滑塊自動(dòng)認(rèn)證功能

發(fā)布時(shí)間:2020-08-20 05:23:18 來(lái)源:腳本之家 閱讀:354 作者:皇月 欄目:開(kāi)發(fā)技術(shù)

本文為大家分享了python2.7+selenium2實(shí)現(xiàn)淘寶滑塊自動(dòng)認(rèn)證的具體代碼,供大家參考,具體內(nèi)容如下

1.編譯環(huán)境

操作系統(tǒng):win7;語(yǔ)言:python2.7+selenium2;ide:pycharm;瀏覽器:IE10,chrome

2.1意外開(kāi)始

今天登錄淘寶時(shí)候發(fā)現(xiàn)吧密碼搞忘了,選擇找回密碼時(shí)淘寶居然加了滑塊認(rèn)證。

python2.7+selenium2實(shí)現(xiàn)淘寶滑塊自動(dòng)認(rèn)證功能

恰巧自己也在學(xué)習(xí)selenium,就想試一試能不能實(shí)現(xiàn)自動(dòng)拖動(dòng)滑塊。

2.2 度娘查找

由于自己沒(méi)多少思路,第一選擇就是問(wèn)度娘,終于找到一篇文章,該文章使用C#實(shí)現(xiàn)了該功能,并提到需要定位滑塊元素在網(wǎng)頁(yè)和桌面的坐標(biāo),而這個(gè)功能直接可以用selenium中的查找元素接口搞定,那么剩下最后一個(gè)問(wèn)題就是如何得知滑塊的位移量。(原諒我忘記該文章的名字了)

2.3 開(kāi)始試驗(yàn)

大家在手動(dòng)操作滑塊的時(shí)候會(huì)發(fā)現(xiàn)如果滑塊位移不夠,它要自動(dòng)還原就不能觸發(fā)認(rèn)證成功環(huán)節(jié),所以我用一個(gè)笨方法先手動(dòng)操作看看。打開(kāi)瀏覽器按F12,得到代碼如下:

python2.7+selenium2實(shí)現(xiàn)淘寶滑塊自動(dòng)認(rèn)證功能

然后拖動(dòng)滑塊位移,發(fā)現(xiàn)滑塊元素的style一直在變化如圖:

python2.7+selenium2實(shí)現(xiàn)淘寶滑塊自動(dòng)認(rèn)證功能

現(xiàn)在大概清楚右位移量為300px,OK開(kāi)始寫(xiě)代碼,經(jīng)過(guò)很多次試驗(yàn)確定滑塊移動(dòng)后有三種情況:

1無(wú)響應(yīng):請(qǐng)按住滑塊,拖到到最右邊;
2失?。喊パ?,加載失敗了,請(qǐng)點(diǎn)擊刷新頁(yè)面
3成功:請(qǐng)點(diǎn)擊圖中xx字,請(qǐng)?jiān)谙路捷斎離x字

解決思路:無(wú)響應(yīng)時(shí),需要重復(fù)拖動(dòng)滑塊,直到成功為止;失敗了,需要自動(dòng)點(diǎn)擊刷新按鈕,使滑塊回到無(wú)響應(yīng)狀態(tài);成功了,暫時(shí)是直接退出瀏覽器,驗(yàn)證碼識(shí)別還在研究中,以后補(bǔ)齊。

2.4 完整代碼

PS:粘貼上去的代碼,我不知道怎么對(duì)齊,如果大家直接復(fù)制運(yùn)行,可能會(huì)報(bào)錯(cuò),請(qǐng)自動(dòng)修改。

# encoding=utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
#使用谷歌瀏覽器,方便查看效果,如果追求速度可以用phantomJS
driver=webdriver.Chrome()
#調(diào)整最大窗口,否則某些元素?zé)o法顯示
driver.maximize_window()
#使用淘寶找回密碼界面做測(cè)試
driver.get('https://passport.taobao.com/ac/password_find.htm?spm=a2107.1.0.0.phBxhD&from_site=0')
time.sleep(5)#等待滑動(dòng)模塊和其他JS文件加載完畢!
while True:
  try:
  #定位滑塊元素
    source=driver.find_element_by_xpath("http://*[@id='nc_1_n1z']") 
  #定義鼠標(biāo)拖放動(dòng)作
            ActionChains(driver).drag_and_drop_by_offset(source,400,0).perform()
    #等待JS認(rèn)證運(yùn)行,如果不等待容易報(bào)錯(cuò)
    time.sleep(2)
    #查看是否認(rèn)證成功,獲取text值
  text=driver.find_element_by_xpath("http://div[@id='nc_1__scale_text']/span")
    #目前只碰到3種情況:成功(請(qǐng)?jiān)谠谙路捷斎腧?yàn)證碼,請(qǐng)點(diǎn)擊圖);無(wú)響應(yīng)(請(qǐng)按住滑塊拖動(dòng));失?。òパ?,失敗了,請(qǐng)刷新)
    if text.text.startswith(u'請(qǐng)?jiān)谙路?):
      print('成功滑動(dòng)')
      break
    if text.text.startswith(u'請(qǐng)點(diǎn)擊'):
      print('成功滑動(dòng)')
      break
    if text.text.startswith(u'請(qǐng)按住'):
      continue
  except Exception as e:
  #這里定位失敗后的刷新按鈕,重新加載滑塊模塊
  driver.find_element_by_xpath("http://div[@id='havana_nco']/div/span/a").click()
    print(e) 
#退出瀏覽器,如果瀏覽器打開(kāi)多個(gè)窗口,可以使用driver.close()關(guān)閉當(dāng)前窗口而不是關(guān)閉瀏覽器
driver.quit()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI