Python爬蟲經常使用之登陸(二) 瀏覽器模擬登陸

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

1.如何使用python的瀏覽器操做工具seleniumweb

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

1、使用selenium打開網頁瀏覽器

from selenium import webdriver

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

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

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

  之前的selenium能夠直接打開firefox,如今的須要安裝geckodriver,本身百度下載一個對應本身瀏覽器的型號的.工具

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

 

2、找到賬號密碼對應的頁面元素spa

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

 

3、將本身的用戶名和密碼填入selenium打開的瀏覽器code

  使用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)

相關文章
相關標籤/搜索