1. 程式人生 > >基於Selenium的微博登入程式碼

基於Selenium的微博登入程式碼

Selenium是自動化測試的一個庫,可以操控瀏覽器(本文主講Chrome),實現相應自動化測試的功能。
有時候Python標準庫urllib.request或者requests庫無法實現相應的登入功能,例如QQ空間的網頁登入,如果使用requests登入post的引數太多而且QQ登入加密演算法比較難解決,因此查閱大多數資料,現在登入主要是基於Selenium來實現,微博也是同樣的道理。當使用其他庫無法解決你想要解決的問題時,可以轉換一下思路,用Selenium+requests庫來實現相應的功能,Selenium解決登入問題,而requests庫或者標準庫urllib.request庫實現爬取資料。缺點是:速度比較慢,但是很好的節約瞭解決登入問題的時間(例如12306的爬蟲登入需要好幾層驗證才可以真正的登入,等有時間可以分享一下),基於Selenium 登入微博的魔板(登入其他網址效果一樣):

    from  time import sleep
    from selenium import webdriver
    driver = webdriver.Chrome(executable_path = '驅動谷歌瀏覽器的chromedriver.exe')
    driver.get(url = "目標登入url")
    sleep(8)#需要等待一定要注意等待的時間要不然會出現找不到元素
    #sleep(8)用下面的此段程式碼來替代因為此時間受網路的影響比較大故用下面程式碼是一種較好的選擇
    '''while True:
            try:
                self.driver.find_element_by_xpath('
//*[@id="loginname"]').click() self.driver.find_element_by_xpath('//*[@id="loginname"]').send_keys('1135428665@qq.com') self.driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input').click() self.driver.find_element_by_xpath('//*[@id="pl_login_form"
]/div/div[3]/div[2]/div/input').send_keys('113542jyk') except: sleep(1) continue else: break ''' '''獲取登陸的xpath或者css通過谷歌瀏覽器的開發者選項中的元素定位然後copy xpath或者 css''' #輸入內容前先點選一下賬號區 driver.find_element_by_xpath("//*[@id="loginname"]").click() #傳送登入賬號 driver.find_element_by_xpath("//*[@id="loginname"]").send_keys("賬號") #點選密碼區 driver.find_element_by_xpath("//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input").click() #傳送登入密碼 driver.find_element_by_xpath("//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input").send_keys("密碼") #如果有驗證碼請在開啟的瀏覽器內輸入並且確定,驗證碼是一個跳不過去的坎,以後需要多研究研究,到時候寫一篇關於12306文章爬蟲會將12306驗證碼的解決方案貼到網上 #設定迴圈目的是當登入網址發生跳轉則退出迴圈。 while 1: sleep(1) #需要登入一下然後copy一下登入跳轉後的網頁地址 if driver.current_url == "https://weibo.com/u/(賬號)/home": break #嘗試列印一下登陸後的cookies和原始碼 #print(driver.get_cookies()) #print(driver.page_source) #使用requests庫載入cookies去訪問其他的網址 session = requests.Session() #刪除Python的請求頭否則可能會被對方伺服器識別出來禁止爬取資料。 session.headers.clear() cookies = driver.get_cookies() for cookies in cookies: session。cookies.set(cookie['name'],cookie['value']) content = session.get(url = '目標爬蟲網址')