python爬蟲工程師 成長之路八 Selenium WebDriver


Selenium WebDriver 簡介


  • Selenium WebDriver是一個本地和遠程的實時瀏覽器自動化工具,是最接近的模擬用戶行爲。

  • WebDriver的目標是提供一個良好設計的面向對象的API,提供了對於現代先進web應用程序測試問題的改進支持。

  • Selenium-Webdriver更好的支持頁面本身不重新加載而頁面的元素改變的動態網頁。


Selenium WebDriver 原理


  • WebDriver是按照C/S(Client/Server) 的模式設計的。

  • WebDriver 啓動目標瀏覽器,並綁定到指定端口。該啓動的瀏覽器實例,做爲web driver的remote server。

  • Client 端根據我們的需求以http請求形式發送給Server,並在執行各種操作後將返回值等信息返回。

  • Server端,也就是Remote server 需要依賴原生的瀏覽器組件(如:chromedriver.exe)來等待 Client 發送請求並做出響應。


Selenium WebDriver 安裝


安裝selenium庫,在命令行中輸入

pip install selenium

出現如下字樣,則安裝成功

Successfully installed selenium

下載與瀏覽器版本相匹配的webdriver

chromedriver.exe

http://chromedriver.storage.googleapis.com/index.html

下載後將chromedriver.exe放到python安裝目錄下的Scripts目錄

在這裏插入圖片描述


Selenium WebDriver 使用


瀏覽器常用操作


啓動瀏覽器

不同的瀏覽器,方式略微不同

from selenium import webdriver
#谷歌瀏覽器
dr = webdriver.Chrome()
#火狐瀏覽器
dr = webdriver.Firefox()

打開網頁

執行該代碼之後,自動打開你輸入的網址

dr.get('http://www.baidu.com')

在這裏插入圖片描述


關閉瀏覽器

在工作結束後常常需要關閉瀏覽器,關閉瀏覽器的方式有兩種:

  • close():關閉當前的瀏覽器窗口
  • quit():不僅會關閉瀏覽器窗口,還會徹底的退出webdriver,釋放與driver server之間的連接,釋放所有的資源
from selenium import webdriver
#谷歌瀏覽器
dr = webdriver.Chrome()
#打開網頁
dr.get('http://www.baidu.com')
#退出瀏覽器
dr.quit()
#dr.close()

最大化瀏覽器

from selenium import webdriver
import time
#谷歌瀏覽器
dr = webdriver.Chrome()
#打開網頁
dr.get('http://www.baidu.com')
#最大化瀏覽器
dr.maximize_window()
#便於觀察
time.sleep(3)
#退出瀏覽器
dr.quit()
#dr.close()

在這裏插入圖片描述


自定義瀏覽器大小

from selenium import webdriver
import time
#谷歌瀏覽器
dr = webdriver.Chrome()
#打開網頁
dr.get('http://www.baidu.com')

dr.set_window_size(240, 320)

#便於觀察
time.sleep(3)
#退出瀏覽器
dr.quit()
#dr.close()

在這裏插入圖片描述


打印當前頁面的信息

打印當前頁面的title、url以及頁面源碼(源碼過多就不進行展示了)

from selenium import webdriver
import time
#谷歌瀏覽器
dr = webdriver.Chrome()
#打開網頁
dr.get('http://www.baidu.com')

print('current_url:',dr.current_url)
print('source:',dr.page_source)
print('title:',dr.title)

#便於觀察
time.sleep(3)
#退出瀏覽器
dr.quit()
#dr.close()

在這裏插入圖片描述


實現瀏覽器前進和後退

後退會返回到當前網頁的上一個網頁,前進也會返回到當前網頁的上一個網頁

from selenium import webdriver
import time
import os

dr = webdriver.Chrome()

first_url = 'http://www.baidu.com'
dr.get(first_url)
print('current_url',dr.current_url)
time.sleep(1)

second_url = 'http://www.news.baidu.com'
dr.get(second_url)
print('current_url',dr.current_url)
time.sleep(1)

dr.back()
print("backing to %s"%(first_url))

time.sleep(1)
dr.forward()
print("forward to %s"%(second_url))
time.sleep(1)
dr.quit()

在這裏插入圖片描述


單對象定位


  • find_element(),用於單對象定位。
  • 對象的定位和操作是webdriver的核心內容,其中操作是建立在定位的基礎之上,因此對象定位的地位就越發顯得重要了

演示文檔

打開百度首頁→鼠標右鍵點擊→查看網頁源碼
在這裏插入圖片描述
webdriver提供了一系列的對象定位方法,常用的有:

by_id

通過id定位需要用id的值定位

#通過id定位
print(dr.find_element_by_id('head').text)

在這裏插入圖片描述


by_name

通過name定位需要用name的值定位

#通過name定位
dr.find_element_by_name('mp')

by_class_name

通過class name定位需要用class name的值定位

#通過name定位
dr.find_element_by_name('mp')

by_tag_name

通過tag name定位需要用標籤的值(如,<a>的值爲a)定位

#通過tag name定位
print(dr.find_element_by_tag_name('div').text)

在這裏插入圖片描述


by_link_text

通過鏈接的文字描述來定位

如匹配下面圖片中的新聞鏈接

dr.find_element_by_link_text("新聞")

在這裏插入圖片描述


by_css_selector

不懂css selector的可以點擊瞭解或只用上面的方式CSS介紹

#獲取標籤名爲div的標籤
dr.find_element_by_css_selector('div')

by_xpath

不懂xpath的可以點擊瞭解或用其他的方式xpath lxml庫

dr.find_element_by_xpath('/html/body/form/div/label')

獲取屬性

獲取div標籤的id屬性

dr.find_element_by_tag_name('div').get_attribute('id')

獲取div標籤的文本內容

print(dr.find_element_by_tag_name('div').text)

在這裏插入圖片描述


一組對象定位


find_elements(),常用於定位一組對象或批量操作對象,用法與前面的單對象定位(find_element())一致(不清楚的往前面翻就行)。


模擬用戶操作


element.click()

模擬用戶點擊對象element

#
dr.find_element_by_link_text("新聞").click()

element.send_keys

模擬用戶向名爲p的文本框輸入python

dr.find_element_by_name('q').send_keys('python')

element.clear()

模擬用戶清除輸入的內容

dr.find_element_by_name('q').clear()

模擬鍵盤輸入

模擬用戶在鍵盤上輸入

from selenium.webdriver.common.keys import Keys

#模擬control+a
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'a'))
#模擬control+c
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'c'))
#模擬control+x
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'v'))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章