Python爬蟲常用之登錄(二) 瀏覽器模擬登錄


瀏覽器模擬登錄的主要技術點在於:

1.如何使用python的瀏覽器操作工具selenium

2.簡單看一下網頁,找到帳號密碼對應的框框,要知道python開啟的瀏覽器如何定位到這些

一、使用selenium打開網頁

from selenium import webdriver

url = 'https://passport.cnblogs.com/user/signin'

driver = webdriver.Firefox()
driver.get(url)

  以上幾句執行便可以打開博客園的登錄界面,開啟瀏覽器可能較慢,耐心等一下.

  以前的selenium可以直接打開firefox,現在的需要安裝geckodriver,自己百度下載一個對應自己瀏覽器的型號的.

  chrome一直都需要驅動,使用chrome的需要設置的可能麻煩一點.推薦看一下蟲師的相關文章,個人覺得講得不錯,百度搜索出來還是比較靠前的.

 

二、找到帳號密碼對應的頁面元素

  瀏覽器打開頁面,點擊f12,按上圖步驟,找到了用戶名的id"input1",同理找到密碼的id,找到后發現是"input2".

 

三、將自己的用戶名和密碼填入selenium打開的瀏覽器

  使用find_element_by_id方法找到元素,再使用send_keys方法傳入參數,最后使用click方法點擊登錄按鈕即可.

 

成品代碼有如下幾句:

# /usr/bin/python
# encoding: utf-8

import time
from selenium import webdriver


def login(username, password):
    # url = 'https://passport.cnblogs.com/user/signin'  # 使用這個url登錄成功后定位到園子
    url = 'https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F'  # url中指明定位到博客園首頁

    driver = webdriver.Firefox()
    driver.get(url)
    # print driver.title
    name_input = driver.find_element_by_id('input1')  # 找到用戶名的框框
    pass_input = driver.find_element_by_id('input2')  # 找到輸入密碼的框框
    login_button = driver.find_element_by_id('signin')  # 找到登錄按鈕

    name_input.clear()
    name_input.send_keys(username)  # 填寫用戶名
    time.sleep(0.2)
    pass_input.clear()
    pass_input.send_keys(password)  # 填寫密碼
    time.sleep(0.2)
    login_button.click()            # 點擊登錄

    time.sleep(0.2)
    print driver.get_cookies()

    time.sleep(2)
    print driver.title

    driver.close()

if __name__ == "__main__":
    user = "Masako"
    pw = "*****"
    login(user, pw)

使用time模塊sleep主要是為了控制操作速度,防止被認為是機器人,比較符合現實的情況應該隨機sleep時間.

上述代碼執行之后(注意將用戶名密碼換成自己的),可以看到打開了瀏覽器,並自動填寫了帳號密碼,自動點擊登錄,成功后跳轉,然后自動關閉瀏覽器.

本地可以看到打印了一份cookie和一個標題"博客園 - 開發者的網上家園".

如果登錄失敗,打印的標題會是"用戶登錄 - 博客園".

如果報錯,未打開瀏覽器,多半是沒有安裝geckodriver.

上述代碼會打開瀏覽器界面,若不想看到界面,可采用以下手段:

if __name__ == "__main__":

    from pyvirtualdisplay import Display

    display = Display(visible=0, size=(1366, 768))
    display.start()
    user = "Masako"
    pw = "*****"
    login(user, pw)
    display.stop()

在調用瀏覽器的時候使用Display包裹,並將dispaly設置為不可見(visible=0)

 


免責聲明!

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



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