Python+selenium 自動化登錄案例(網易嚴選郵箱登錄,iframe切換)


  今天想用利用python和selenium框架來練習下自動化登錄,看了好多網站登錄需要驗證碼對博主剛入門的人還是有點難度,因此想找一個不需要驗證碼的網站登錄,實在不好找,想着網易的產品還是做得很好的,所以去查看了網易相關的網站,發現網易嚴選登錄是不需要驗證碼的,不過還是遇到了坑(iframe切換)

從郵箱登錄界面開始:

 

   找到了郵箱賬號輸入框的元素,如果你之前都依賴與用右鍵直接copy瀏覽器自動生成的xpathname,在這里一定不會奏效,這也告訴我們一定要自己學會寫xpath。在網易嚴選的這個登錄界面僅僅寫對xpath還是沒有用的,因為這里有一個坑,就是iframe框架,我們要的元素都是在這個框架下,因此要先切換到iframe才能繼續定位元素。你可以簡單認為iframe框架下的元素和背后的頁面不在同個界面里,因此我們無法直接定位到這個彈窗里的元素(這么說不一定合適)。

第一步:先定位iframe

  如果iframe里有唯一的屬性,例如id和name,我們可以直接使用driver.switch_to_frame("id/name")就解決問題了,然后繼續用xpath進行元素定位。當然,如果你能確定這個頁面中有幾個iframe的時候,你可以直接用索引的方式來切換,如果這個頁面中有三個iframe,這個iframe處於第二個,可以寫成driver.switch_to_frame(1),從0開始的

  在網易嚴選的這個頁面中,注意iframe的name=0,id是那么一串數字還有小數,很明顯是動態的id,刷新下就變了,因此不具備唯一的屬性,所以不能依靠屬性直接切換到iframe。所以我們先用xpath定位到iframe,在進行切換。仔細觀察下,發現iframe的父節點div具有唯一屬性的id=j-yx-mailLoginWrap,因此根據屬性匹配和絕對路徑的方式寫xpath:ele=driver.find_element_by_xpath("//*[@id='j-yx-mailLoginWrap']/iframe"),(當然也可以用其他很多方法來定位)。再執行driver.switch_to_frame(ele)就可以成功切換到iframe了。

第二步:xpath定位郵箱賬號輸入框

  發現這個input的屬性非常多,這時候要注意屬性的唯一性,有的可能並不是唯一就會導致定位不准確,博主在這選擇了class屬性,下邊還有一個密碼輸入框,把它點開對比了下它們的class值。選用class作為屬性匹配,xpath寫成ele=driver.find_element_by_xpath("//*[@class='j-inputtext dlemail']"),這時候就大功告成了!

 

 

網易嚴選自動化郵箱賬號登錄python腳本代碼(博主在python自帶的集成開發環境下寫的,好處是可以看到每一步的變化):

python版本3.5

>>>from selenium import webdriver                                #導入webdriver
>>> b = webdriver.Firefox()                                #用的火狐瀏覽器
>>> b.get("http://you.163.com")                               #輸入url
>>> ele = b.find_element_by_xpath("//*[@class='j-yx-cp-topLogin']")                 #定位登錄按鈕
>>> ele.click()                                        #點擊登錄按鈕
>>> ele = b.find_element_by_xpath("//*[@id='j-yx-loginFormWrap']/div/div[1]/div[1]/div[3]")  #定位郵箱登錄按鈕
>>> ele.click()                                      #點擊郵箱登錄按鈕切換到郵箱登錄

>>> ele1 = b.find_element_by_xpath("//*[@id='j-yx-mailLoginWrap']/iframe")          #定位到iframe
>>> b.switch_to_frame(ele1)                                 #切換到iframe
>>> ele2 = b.find_element_by_xpath("//*[@class='j-inputtext dlemail']")             #定位賬號輸入框
>>> ele2.send_keys("xxx@163.com")                             #輸入郵箱賬號

>>>ele3 = b.find_element_by_xpath("//*[@class='j-inputtext dlpwd']")              #定位密碼輸入框
>>> ele3.send_keys("xxx")                                   #輸入密碼
>>> ele4 = b.find_element_by_xpath("//*[@id='dologin']")                   #定位登錄按鈕
>>> ele4.click()                                       #點擊登錄按鈕


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM