今晚寫了一個163郵箱登錄的腳本,由於不停的訪問163登錄主頁導致直接訪問163郵箱主頁登錄需要輸入驗證碼,因為無法獲取到驗證碼,就這導致直接訪問主頁登錄腳本不可行,為了繞過驗證碼,現在先訪問hao123主頁,再從主頁點擊'郵箱'登錄。
1 #coding=utf-8
2 from selenium import webdriver 3 from time import sleep 4
5 driver = webdriver.Firefox() 6 driver.maximize_window() 7 driver.get("http://www.hao123.com") 8 sleep(5) 9 #獲取hao123主頁的句柄
10 handle_hao123 = driver.current_window_handle 11 #登錄163郵箱
12 driver.find_element_by_link_text("郵箱").click() 13 driver.find_element_by_id("mailName").clear() 14 driver.find_element_by_id("mailName").send_keys("郵箱地址") #你的郵箱地址 15 driver.find_element_by_id("mailPwd").clear() 16 driver.find_element_by_id("mailPwd").send_keys("郵箱密碼") #你的郵箱密碼 17 driver.find_element_by_id("mailSubmit").click() 18 #獲取所有窗口的句柄
19 all_handles = driver.window_handles 20 #根據窗口句柄的再判斷,切換到163窗口
21 for handle in all_handles: 22 if handle != handle_hao123: 23 driver.switch_to_window(handle) 24 print("now access mail 163!") 25 #定位'寫信'按鈕
26 driver.find_elements_by_class_name("oz0")[1].click() 27 sleep(1) 28 #定位收件人輸入框並輸入收件人信息
29 driver.find_element_by_class_name("nui-editableAddr-ipt").clear() 30 driver.find_element_by_class_name("nui-editableAddr-ipt").send_keys("收件人郵箱") 31 #定位郵件的主題並輸入信息
32 driver.find_elements_by_class_name("nui-ipt-input")[2].clear() 33 driver.find_elements_by_class_name("nui-ipt-input")[2].send_keys("發送郵件測試") 34 #由於通過class_name定位出多個元素,需先定位一組元素再做篩選
35 #添加附件,由於此標簽為input,因此可以直接使用send_keys的方式添加附件
36 driver.find_element_by_xpath('//input[@type="file"]').send_keys("D:\\sublimePython\\cookie.txt") 37 #由於在郵件正文中有iframe,需先定位並切換到表單中
38 frame = driver.find_element_by_class_name("APP-editor-iframe") #若iframe有id或是name屬性,可以直接切換
39 driver.switch_to_frame(frame) 40 #輸入正文
41 driver.find_element_by_xpath('//body[@class="nui-scroll"]').send_keys("Good study, day day up!") 42 driver.switch_to_default_content() 43 #點擊發送
44 driver.find_elements_by_class_name("nui-btn-text")[-2].click() 45 sleep(5) 46 driver.close() 47
48 driver.quit()
PS:看來自己確實太菜,今天在辦公室又可以直接訪問郵箱主頁進行登錄,腳本其實都差不多,如下:
1 #coding=utf-8
2 from selenium import webdriver 3 from time import sleep 4
5 driver = webdriver.Chrome() 6 #最大化窗口
7 driver.maximize_window() 8 driver.get('http://www.mail.163.com') 9 sleep(2) 10 #切換到表單
11 driver.switch_to.frame("x-URS-iframe") 12 driver.find_element_by_name("email").clear() 13 driver.find_element_by_name("email").send_keys("郵箱賬戶") 14 driver.find_element_by_name("password").clear() 15 driver.find_element_by_name("password").send_keys("郵箱密碼") 16 driver.find_element_by_id("dologin").click() 17 sleep(5) 18 #在表單里面操作完畢后,無論頁面是否進行跳轉,必須有退出表單的操作
19 driver.switch_to_default_content() 20 #定位'寫信'按鈕
21 driver.find_elements_by_class_name("oz0")[1].click() 22 sleep(1) 23 #定位收件人輸入框並輸入收件人信息
24 driver.find_element_by_class_name("nui-editableAddr-ipt").clear() 25 driver.find_element_by_class_name("nui-editableAddr-ipt").send_keys("收件人郵箱") 26 #定位郵件的主題並輸入信息
27 driver.find_elements_by_class_name("nui-ipt-input")[2].clear() 28 driver.find_elements_by_class_name("nui-ipt-input")[2].send_keys("發送郵件測試") 29 #由於通過class_name定位出多個元素,需先定位一組元素再做篩選
30 #添加附件
31 driver.find_element_by_xpath('//input[@type="file"]').send_keys("D:\\sublimePython\\cookie.txt") 32
33 #由於在郵件正文中有iframe,需先定位並切換到表單中
34 frame = driver.find_element_by_class_name("APP-editor-iframe") #若iframe有id或是name屬性,可以直接切換
35 driver.switch_to_frame(frame) 36 #輸入正文
37 driver.find_element_by_xpath('//body[@class="nui-scroll"]').send_keys("Good study, day day up!") 38 driver.switch_to_default_content() 39 #點擊發送
40 driver.find_elements_by_class_name("nui-btn-text")[-2].click() 41 sleep(5) 42 driver.quit()