PS:寫了2個小時,忘記保存了,無奈只得重寫。心痛!
最近玩合天,必須每天登錄才有合氏幣拿,每次輸入用戶名和密碼太麻煩了;想破解某同學的QQ相冊,必須先達到登錄狀態才行啊。
環境:win7 64位 + python2.7 + selenium
一、安裝selenium
Selenium是一個WEB自動化測試工具,它運行時會直接實例化出一個瀏覽器,完全模擬用戶的操作,比如點擊鏈接、輸入表單,點擊按鈕提交等。所以我們使用它可以很方便的來登錄網站和QQ空間。
pip install selenium
二、安裝瀏覽器驅動Chromedriver
一開始測試報錯,並且Chrome瀏覽器提示:請停用以開發者模式運行的擴展程序,網址輸入框中只顯示:data;,如下圖:

這個問題是由於因為瀏覽器驅動Chromedriver和Chrome的版本不兼容導致無法通過driver在瀏覽器輸入網址而出現的,解決的辦法很簡單:查看你Chrome瀏覽器的版本(幫助 -> 關於Google Chrome(G)),下載對應版本的瀏覽器驅動就可以了。
下載對應Chromedriver后放到python目錄、或者system32下,就可以了。
附表:最新的Chromedriver與Chrome的版本對應關系表:
| chromedriver版本 | 支持的Chrome版本 |
|---|---|
| v2.35 | v62-64 |
| v2.34 | v61-63 |
| v2.33 | v60-62 |
| v2.32 | v59-61 |
| v2.31 | v58-60 |
| v2.30 | v58-60 |
| v2.29 | v56-58 |
| v2.28 | v55-57 |
| v2.27 | v54-56 |
| v2.26 | v53-55 |
| v2.25 | v53-55 |
| v2.24 | v52-54 |
| v2.23 | v51-53 |
| v2.22 | v49-52 |
| v2.21 | v46-50 |
| v2.20 | v43-48 |
| v2.19 | v43-47 |
| v2.18 | v43-46 |
| v2.17 | v42-43 |
| v2.13 | v42-45 |
| v2.15 | v40-43 |
| v2.14 | v39-42 |
| v2.13 | v38-41 |
| v2.12 | v36-40 |
| v2.11 | v36-40 |
| v2.10 | v33-36 |
| v2.9 | v31-34 |
| v2.8 | v30-33 |
| v2.7 | v30-33 |
| v2.6 | v29-32 |
| v2.5 | v29-32 |
| v2.4 | v29-32 |
不同版本的Chromedriver都可以通過這里鏈接下載:
http://chromedriver.storage.googleapis.com/index.html
我下載的是chromedriver win32.zip
三、模擬登錄QQ空間
有個關鍵點得注意,在Web應用中經常會遇到frame/iframe 表單嵌套頁面的應用,QQ空間就是這樣的,由於WebDriver 只能在一個頁面上對元素識別與定位,對於frame/iframe 表單內嵌頁面上的元素無法直接定位。這時就需要通過switch_to.frame()方法將當前定位的主體切換為frame/iframe 表單的內嵌頁面中。
不廢話,直接上碼。
#-*- coding:utf8 -*- # 導入selenium2中的webdriver庫 from selenium import webdriver # 實例化出一個Firefox瀏覽器 driver = webdriver.Chrome() # 設置瀏覽器窗口的位置和大小 driver.set_window_position(20,40) driver.set_window_size(1100,700) # 打開一個頁面(QQ空間登錄頁) driver.get("http://qzone.qq.com") # 登錄表單在頁面的框架中中,所以要切換到該框架 driver.switch_to_frame('login_frame') # 通過使用選擇器選擇到表單元素進行模擬輸入和點擊按鈕提交 driver.find_element_by_id('switcher_plogin').click() driver.find_element_by_id('u').clear() driver.find_element_by_id('u').send_keys('1650277972') driver.find_element_by_id('p').clear() driver.find_element_by_id('p').send_keys('*********')#password driver.find_element_by_id('login_button').click() # do something # 退出窗口 #driver.quit()
錄了一個gif,但是這個 gif 好慢啊,應該是錄制軟件的問題。
四、模擬登錄合天智匯(可以賺幣啦^_^)
#-*- coding:utf8 -*- # 導入selenium2中的webdriver庫 from selenium import webdriver # 實例化出一個Firefox瀏覽器 driver = webdriver.Chrome() # 設置瀏覽器窗口的位置和大小 driver.set_window_position(20,40) driver.set_window_size(1100,700) # 打開一個頁面(合天登錄頁) driver.get("http://www.hetianlab.com/loginLab.do") # 通過使用選擇器選擇元素進行模擬輸入和點擊按鈕提交 driver.find_element_by_id('userEmail').clear() driver.find_element_by_id('userEmail').send_keys('17690764155') driver.find_element_by_id('passwordIn').clear() driver.find_element_by_id('passwordIn').send_keys('**********') driver.find_element_by_id('registButIn').click() # do something # 退出窗口 #driver.quit()
THE END
