前面幾篇介紹了下Selenium幹什麼用的,怎麼安裝Selenium和WebDriver,這篇就來個簡單演示程式讓它run起來,看程式碼領會精神是比較直接的。
Python Selenium的執行原理
上程式碼前,再囉嗦下Selenium是怎麼執行起來,跟WebDriver是什麼關係。
我們安裝的Selenium Python庫提供了一系列介面(API),比如滑鼠點選,拖動,填寫輸入框等等。
上一篇我們安裝的WebDriver是chrome瀏覽器的chromedriver,是用來跟瀏覽器保持通訊,就是當你呼叫API時,要靠這個driver來把訊息傳遞給瀏覽器,瀏覽器才能響應你。
當你執行程式後,driver會以程式的方式常駐在記憶體中,如果是windows使用者,你在工作管理員的程式中會看到chromedriver.exe這個程式。
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編碼字串是要報錯的。
總結:
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()來簡單代替。
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***