Python 2.7
IDE Pycharm 5.0.3
原因
不止一個(gè)小伙伴告訴我,想模仿我的一鍵CSDN寫博客想模擬登錄qq或者網(wǎng)易郵箱,但是貌似用xpath和css都不行了,我嘗試了一下,原來(lái)他們采用動(dòng)態(tài)id了。所以直接定位id已經(jīng)不能用了,但是xpath找來(lái)說應(yīng)該只是路徑,和具體變量無(wú)關(guān)吧,為什么還是不行呢?我現(xiàn)在嘗試了網(wǎng)上若干方法,都不成功,所以我抖了個(gè)機(jī)靈~
解決方案
額,目前我沒有找到根治的方法,但是有個(gè)取巧的方法,就是嘗試不同的登陸端口,登錄頁(yè)面不一樣只有一個(gè)對(duì)不,他們的程序員可能只想著最大的登錄口設(shè)置反爬,科科,我可以繞啊。
比如說網(wǎng)易郵箱把,我們肯定一搜“網(wǎng)易郵箱”彈出第一個(gè)就點(diǎn)了對(duì)不對(duì),中了圈套啊,你要記住,程序猿都是很懶的哈哈,我們點(diǎn)開第二個(gè)http://email.163.com/ 就可以了,直接xpath就ok,如果你選擇第一個(gè)http://mail.163.com/ 這個(gè)的話,id就是動(dòng)態(tài)的了,科科。qq郵箱同樣道理,繼續(xù)抖機(jī)靈~點(diǎn)擊qq郵箱,然后右上角有個(gè)基本版,點(diǎn)擊基本版,好啦,一樣可爬,哈哈哈,程序猿,不要太偷懶啊
qq切換基本版
網(wǎng)頁(yè)切換版本
代碼
#登錄網(wǎng)易郵箱
from selenium import webdriver
import time
print 'Please wait...Firefox loading...'
print '---------------------------------'
#reload(sys)
PostUrl ="http://email.163.com/#from=163nav_icon"
driver=webdriver.Firefox()#用瀏覽器實(shí)現(xiàn)訪問
driver.get(PostUrl)
time.sleep(1)
#賬號(hào)填充輸入
driver.find_element_by_xpath(".//*[@id='idPlaceholder']").send_keys('xxxxxxx')
driver.find_element_by_xpath(".//*[@id='pwdPlaceholder']").send_keys('xxxxxxx')
#點(diǎn)擊登錄
click_login = driver.find_element_by_xpath(".//*[@id='btnSubmit']")
click_login.click()
print 'log in...'
print '---------------------------------'
time.sleep(1)
'''
driver.close()
'''
#登錄qq郵箱
from selenium import webdriver
import time
print 'Please wait...Firefox loading...'
print '---------------------------------'
#reload(sys)
PostUrl ="https://ui.ptlogin2.qq.com/cgi-bin/login?style=9&appid=522005705&daid=4&s_url=https%3A%2F%2Fw.mail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwsk%26delegate_url%3D%26f%3Dxhtml%26target%3D&hln_css=http%3A%2F%2Fmail.qq.com%2Fzh_CN%2Fhtmledition%2Fimages%2Flogo%2Fqqmail%2Fqqmail_logo_default_200h.png&low_login=1&hln_autologin=%E8%AE%B0%E4%BD%8F%E7%99%BB%E5%BD%95%E7%8A%B6%E6%80%81&pt_no_onekey=1"
driver=webdriver.Firefox()#用瀏覽器實(shí)現(xiàn)訪問
driver.get(PostUrl)
time.sleep(1)
#賬號(hào)填充輸入
driver.find_element_by_xpath(".//*[@id='u']").send_keys('xxxxxxx')
driver.find_element_by_xpath(".//*[@id='p']").send_keys('xxxxxxx')
#點(diǎn)擊登錄
click_login = driver.find_element_by_xpath(".//*[@id='go']")
click_login.click()
print 'log in...'
print '---------------------------------'
time.sleep(1)
'''
driver.close()
'''
最后
在沒有能力解決問題的時(shí)候,換個(gè)角度或許就可以了,哈哈。以后要是我知道怎么根治動(dòng)態(tài)id的問題,我再來(lái)把【偽】字去掉。