python爬蟲,登陸神器之Selenium程序演示

Python 網絡爬蟲 Chrome 瀏覽器 HTML 鼠標 Windows CSS 平地摔VS天然呆 2019-05-30

前面幾篇介紹了下Selenium幹什麼用的,怎麼安裝Selenium和WebDriver,這篇就來個簡單演示程序讓它run起來,看代碼領會精神是比較直接的。

python爬蟲,登陸神器之Selenium程序演示

Python Selenium的運行原理

上代碼前,再囉嗦下Selenium是怎麼運行起來,跟WebDriver是什麼關係。

我們安裝的Selenium Python庫提供了一系列接口(API),比如鼠標點擊,拖動,填寫輸入框等等。

上一篇我們安裝的WebDriver是chrome瀏覽器的chromedriver,是用來跟瀏覽器保持通信,就是當你調用API時,要靠這個driver來把消息傳遞給瀏覽器,瀏覽器才能響應你。

當你運行程序後,driver會以進程的方式常駐在內存中,如果是windows用戶,你在任務管理器的進程中會看到chromedriver.exe這個進程。

Python Selenium演示程序

python爬蟲,登陸神器之Selenium程序演示

我們使用瀏覽器一般會做以下幾件事情:

1.打開一個網頁

2.鼠標在頁面上滑動 **

**3.點擊一個鏈接

4.在不同網頁(tab)間切換

5.在表單(輸入框)中填寫信息,並提交

6.打開網頁後,希望能自動讀取cookies(實現自動登錄等行為)

我們來寫段小程序演示一下1,2,3,5,至於切換tab和cookies管理我們另開文章說明。這段程序演示打開猿人學首頁,並來回滑動頁面,然後點擊頁面右上角的搜索圖標,輸入“Python教程”後回車。

代碼在Python3.6版本中調試通過。囉嗦完了該上代碼了。

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
#打開Chrome瀏覽器
driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")
#瀏覽器最大化
driver.maximize_window()
#打開猿人學首頁
driver.get('https://www.yuanrenxue.com')
time.sleep(3)
#滑動到頁面中間處
driver.execute_script("window.scrollTo(0,document.body.scrollHeight/2)")
time.sleep(3)
#滑動到頁面最下方
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(3)
#滑動到頁面最上方
driver.execute_script("window.scrollTo(0,0)")
time.sleep(3)
#通過html的class屬性來定位鏈接位置,並點擊
driver.find_element_by_class_name('slide-left').click()
time.sleep(3)
#定位頁面右上角的搜索圖標並點擊
driver.find_element_by_class_name('search-show').click()
#找到輸入框
search = driver.find_element_by_class_name("search-input")
#輸入 Python教程
search.send_keys(u'python教程')
time.sleep(7)
#回車
search.send_keys(Keys.RETURN)
time.sleep(5)
driver.quit()

看完演示過程,我們再來回顧一下操作步驟。

首先是要調用Chrome()方法打開瀏覽器。

然後是調用get()方法打開網站。

剩下的事情就是開始模擬鼠標和鍵盤行為了。

頁面滑動是靠執行JS代碼來實現的,那個代碼可以直接拷貝使用。

點擊鏈接前,你先要定位到這個元素(鏈接),怎麼定位元素?

我們上面的例子是靠找html class屬性來實現的,調用的find_element_by_class_name()方法來定位元素的class name, 還可以靠xpath,靠css,靠class id來定位,這都要針對你具體的網站來選擇,選擇依據就是怎麼方便怎麼來,後面我們再具體聊這塊,具體的我們在下一篇文章中聊。

向輸入框中輸入字符並回車也很簡單。

先定位到輸入框,然後調用send_keys()方法輸入。

注意這裡只能輸入unicode,輸utf,gbk編碼字符串是要報錯的。

python爬蟲,登陸神器之Selenium程序演示

總結:

1.上面所有的函數調用都是從 from selenium import webdriver 這個包裡調用的,我們要操作的相關API基本都在這裡面。

2.點擊鏈接,在輸入框裡輸入字符等操作,要先定位到這個元素處。

3.定位元素的方法有很多:xpath ,css ,class id,class name都可以。

4.程序運行完了要記得調用driver.quit()退出,不然chromedriver.exe進程不會自己退出,反覆這樣運行程序的話,內存裡就會有好幾個chromedriver.exe

思考:

上面每個幾行代碼我都加了time.sleep()這是為什麼?

一個原因是為了演示流程更清晰,在每個操作步驟處停留幾秒,觀看更清楚。

第二個原因是:我們知道打開一個網頁後瀏覽器會加載一段時間,根據網絡情況,加載時間有快有慢,在資源還沒有加載完的情況下,我們去定位元素有可能是定位不到的,這時就會報錯。所以讓它停留一段時間來加載資源。

其實selenium是有自己的等待函數的,這裡先用time.sleep()來簡單代替。

相關推薦

推薦中...