使用selenium自動登錄126/163郵箱並發送郵件


我使用的是python2.7.13+selenium

ps:幾天之前,我曾多次嘗試寫這段代碼,但是在點擊寫信的步驟時失敗了,我想我的問題應該大致是這幾點:

       1.寫信按鈕不能直接定位到,同時它的父目錄id是動態的,我當時使用xpath定位到了這個動態的id,所以失敗是必然的,那么就需要我們繼續尋找向上尋找父目錄,即多層級的xpath(建議多使用xpath/css)成功率會更高,因為層級越少,那么出現重復的可能越大(比如126寫信中的主題的class和搜索框的class是一樣的,當然還有很多)

       2.頁面的加載未完全,導致元素未找到而出現錯誤,所以需要我用到顯示和隱式等待

       3.同時要及時清除瀏覽器中的緩存,因為垃圾過多會導致瀏覽器運行變慢甚至崩潰

好了,話有點多了,直接貼代碼:

#coding:UTF-8
import time
from selenium.webdriver.common.keys import Keys 
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(30)
#隱式等待,不影響用例執行速度
#如果登錄時出現了驗證碼,可以將等待時長設置更長(如60),手動點擊完成驗證,並點擊登錄(ps:自動驗證碼很難,我感覺這種類型的驗證碼是其中的Boss) driver.get('http://mail.126.com/') driver.switch_to_frame('x-URS-iframe')
#登錄頁面存在iframe driver.find_element_by_name('email').clear() driver.find_element_by_name('email').send_keys('testingwtb') driver.find_element_by_name('password').send_keys('a123456', Keys.ENTER) time.sleep(6)
#跳轉頁面時,強制等待6s driver.find_element_by_xpath("//div[@id='dvNavTop']/ul/li[2]/span[2]").click()
#點擊寫信按鈕 time.sleep(2) driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('780720038@qq.com')
#收件人 driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @type='text' and @maxlength='256']").send_keys(u'測試')
#主題 xpath = driver.find_element_by_xpath("//div[@class='APP-editor-edtr']/iframe") driver.switch_to_frame(xpath)
#文本內容在iframe中 driver.find_element_by_xpath("//body[@class='nui-scroll' and @contenteditable='true']").send_keys(u'這是一個自動化測試郵件') driver.switch_to_default_content()
#發送按鈕在iframe外,所以需要跳出 driver.find_element_by_xpath("//div[@class='nui-toolbar-item']/div/span[2]").click()
#發送

 


免責聲明!

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



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