小白學 Python 爬蟲(27):自動化測試框架 Selenium 從入門到放棄(上)

2022-01-04 極客挖掘機

收錄於話題 #小白學 Python 爬蟲篇 42個


人生苦短,我用 Python

前文傳送門:

小白學 Python 爬蟲(1):開篇

小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝

小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門

小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門

小白學 Python 爬蟲(5):前置準備(四)資料庫基礎

小白學 Python 爬蟲(6):前置準備(五)爬蟲框架的安裝

小白學 Python 爬蟲(7):HTTP 基礎

小白學 Python 爬蟲(8):網頁基礎

小白學 Python 爬蟲(9):爬蟲基礎

小白學 Python 爬蟲(10):Session 和 Cookies

小白學 Python 爬蟲(11):urllib 基礎使用(一)

小白學 Python 爬蟲(12):urllib 基礎使用(二)

小白學 Python 爬蟲(13):urllib 基礎使用(三)

小白學 Python 爬蟲(14):urllib 基礎使用(四)

小白學 Python 爬蟲(15):urllib 基礎使用(五)

小白學 Python 爬蟲(16):urllib 實戰之爬取妹子圖

小白學 Python 爬蟲(17):Requests 基礎使用

小白學 Python 爬蟲(18):Requests 進階操作

小白學 Python 爬蟲(19):Xpath 基操

小白學 Python 爬蟲(20):Xpath 進階

小白學 Python 爬蟲(21):解析庫 Beautiful Soup(上)

小白學 Python 爬蟲(22):解析庫 Beautiful Soup(下)

小白學 Python 爬蟲(23):解析庫 pyquery 入門

小白學 Python 爬蟲(24):2019 豆瓣電影排行

小白學 Python 爬蟲(25):爬取股票信息

小白學 Python 爬蟲(26):為啥買不起上海二手房你都買不起

引言

前面連續幾篇爬蟲實戰不知道各位同學玩的怎麼樣,小編是要繼續更新了,本篇我們來介紹一個前面已將安裝過的工具: Selenium ,如果說是叫爬蟲工具其實並不合適,在業界很多時候是拿來做自動化測試的,所以本篇的標題也就叫成了自動化測試框架。

至於為什麼叫這個名字我們就不去深究了,老外起名字的想像力還是相當可以的。

它可以通過驅動程序驅動瀏覽器執行特定的動作,這個特性對我們爬取由 JavaScript 動態渲染的頁面是非常友好的。

因為由 JavaScript 動態渲染的頁面,這種頁面上的 JavaScript 通常經過了編譯打包,看到的都是簡碼,非常難以閱讀。

其實他們編譯打包的目的就是不想讓別人看,但是由於瀏覽器的特性由所有人都看得到,這個就比較尷尬了。。。

比較常見的打包方式有 webpack 打包等等。

有感興趣的同學可以在留言區留言,人多的話小編後續可以分享一些前端的內容。

前置準備

在開始之前,如果還沒安裝過環境的同學建議還是翻一翻前面你的文章,先把環境搞定。

請確認自己已經安裝了 Chrome 瀏覽器並且也已經正確的配置了 ChromeDriver ,然後還需要正常的安裝了 Selenium 庫。

首先,還是官方網址敬上:

官方文檔:https://selenium.dev/selenium/docs/api/py/api.html

有任何問題找官方,看不懂可以使用翻譯軟體。

基礎操作

以上前置準備都 ok 了以後,我們開始了解一下 Selenium 的一些基礎操作把。先寫一點簡單的小功能演示一下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()

browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
input.send_keys('極客挖掘機')
input.send_keys(Keys.ENTER)
print(browser.current_url)
print(browser.get_cookies())
print(browser.page_source)

運行以上代碼,可以看到自動彈出來一個 Chrome 瀏覽器,並且上面標示了: Chrome 正受到自動軟體的控制 。然後打開了百度,在輸入框中輸入了 「極客挖掘機」 進行搜索。

再搜索結果出來後控制臺列印了當前的 URL 、 cookies 和網頁的原始碼。

控制臺的運行結果就截個圖吧,內容太長就不貼了。

可以看到, Selenium 拿到的內容,都是真實展示在瀏覽器中的內容。由 JavaScript 動態加載的頁面生成的 DOM 節點在 Selenium 下也無所遁形。

這個很好解釋,因為 Selenium 是直接拿到的瀏覽器展示的內容。

聲明瀏覽器對象

Selenium 支持非常多的瀏覽器,如:

from selenium import webdriver

# 聲明瀏覽器對象,需對應的驅動程序方可使用
browser = webdriver.android()
browser = webdriver.blackberry()
browser = webdriver.chrome()
browser = webdriver.edge()
browser = webdriver.firefox()
browser = webdriver.ie()
browser = webdriver.opera()
browser = webdriver.phantomjs()
browser = webdriver.safari()

可以看到有我熟悉的 IE 瀏覽器、 Edge 瀏覽器、 FireFox 瀏覽器、 Opera 瀏覽器等等。

訪問網頁

訪問網頁可以使用 get() 方法,參數傳入我們想要訪問的網站即可:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https:
print(browser.page_source)

通過上面兩行代碼,我們可以看到自動打開了瀏覽器並訪問的京東,在控制臺列印了京東的原始碼。

當然,如果想要程序自動關閉瀏覽器的話可以使用:

browser.close()

這句話加在上面可以看到瀏覽器打開後訪問京東一閃而過就關掉了。

查找單個節點

我們獲取到網頁後,第一步肯定是要先查找到 DOM 節點啊,然後可以直接從 DOM 節點中獲取數據。

不過有了 Selenium 以後,我們不僅可以查找到節點獲取數據,還可以模擬用戶操作,比如在搜索框輸入某些內容,點擊按鈕等等操作,不過還是先看看怎麼查找節點:

從上面這張圖可以看到,我們想要獲取輸入框,可以通過 id 進行獲取,那麼我們接下來的代碼要這麼寫:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')
input_key = browser.find_element_by_id('key')
print(input_key)

結果如下:

<selenium.webdriver.remote.webelement.WebElement (session="86d1ae1419bee22099a168dfbf921a27", element="53047804-ad39-4dfd-b3fb-a149fb1c8ac8")>

可以看到,我們獲得的元素類型是 WebElement 。

小編這裡順手列出所有的獲得單個節點的方法:

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

此外, selenium 還未我們提供了一個通用方法 find_element() ,它需要傳入兩個參數:查找方式 By 和值。實際上上面示例中的查找方式還可以這麼寫(效果完全一樣哦~~~):

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')
input_key1 = browser.find_element(By.ID, 'key')
print(input_key1)

結果小編就不貼了,各位同學可以自己運行下進行對比。

查找多個節點

比如我們要查找左邊的這種導航條的所有條目:

可以這麼寫:

lis = browser.find_elements_by_css_selector('.cate_menu li')
print(lis)

結果如下:

[<selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="8e0d1a8c-d5dc-4b1f-8250-7f0eca864ea7")>, <selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="15cd4dc9-42f4-4ed7-9258-9aa29073243c")>,
.]

太多了,小編後面的結果就省略掉了。

下面列出來所有的多節點選擇的方法:

find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

同樣,多節點選擇也有一個 find_elements() 的方法,小編這裡就不展示,各位同學自己試一試。

本篇先到這裡,下一篇我們接著介紹交互操作。

示例代碼

本系列的所有代碼小編都會放在代碼管理倉庫 Github 和 Gitee 上,方便大家取用。

示例代碼-Github:https://github.com/meteor1993/python-learning/tree/master/python-spider/selenium-demo

示例代碼-Gitee:https://gitee.com/inwsy/python-learning/tree/master/python-spider/selenium-demo

參考

https://selenium-python.readthedocs.io/api.html

https://cuiqingcai.com/5630.html

相關焦點

  • 學會Python+Selenium,分分鐘搭建Web自動化框架!
    用python+selenium實現UI自動化測試,要有一些HTML和xpth的基礎,當然python基礎一定是必須要會的。筆者建議花點時間了解下相關基礎知識,不至於後面發懵。一、什麼是selenium?selenium是個強大的工具集。
  • 小白學 Python 爬蟲(17):Requests 基礎使用
    人生苦短,我用 Python前文傳送門:小白學 Python 爬蟲(1):開篇小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝小白學 Python
  • 小白學 Python 爬蟲(21):解析庫 Beautiful Soup(上)
    爬蟲(3):前置準備(二)Linux基礎入門小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門小白學 Python 爬蟲(5):前置準備(四)資料庫基礎小白學 Python 爬蟲(6):前置準備(五)爬蟲框架的安裝小白學 Python 爬蟲(7):HTTP 基礎小白學 Python 爬蟲(8):網頁基礎
  • python爬蟲之selenium抓取淘寶商品信息
    簡介本節採用python爬蟲相關技術獲取淘寶商品信息。採用的技術有selenium、pyquery及urllib.parse等。selenium可以模擬用戶執行的操作,是一個自動化測試工具,我們可以根據自己的需要預先設置selenium按照我們設置好的步驟進行操作,而在爬蟲中我們使用selenium可以解決javascript動態執行代碼的問題,不用費心去解析js如何運行,運行後產生的信息,直接使用selenium模擬實際登陸網頁的操作,獲取我們需要的信息進行分析,成功幫我們避開一系列複雜的通信過程,方便使用者。
  • 自動化測試基礎篇:Selenium 框架設計(POM)
    Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。本文介紹selenium的框架設計。自動化測試框架1.什麼是自動化測試框架簡單來說,自動化測試框架就是由一些標準,協議,規則組成,提供腳本運行的環境。
  • Selenium,一個神奇的爬蟲以及自動化測試工具
    它發展至今,不僅在自動化測試領域佔據重要位置,並且在爬蟲上也應用廣泛。接下來我們一起看看它是如何應用在爬蟲上的。安裝Selenium 我們這裡以谷歌瀏覽器為例。在搭建Selenium開發環境時,我們需要安裝Selenium庫並且配置谷歌瀏覽器的WebDriver。
  • python爬蟲之selenium--獲取HTML源碼斷言和URL地址
    python爬蟲之selenium--獲取HTML源碼斷言和URL地址前言在做測試的時候經常會使用selenium獲取網頁url與原始碼,判斷當前執行是否正確
  • Python無頭爬蟲Selenium系列(01):像手工一樣操作瀏覽器
    轉發本文並私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)作為"數據玩家",如果手頭上沒有數據怎麼辦?當然是用代碼讓程序自動化採集數據,但是現在"爬蟲"不是那麼容易,其中最困難的即是突破網站各種反爬機制。
  • Python測試框架:pytest學習筆記
    這篇文章主要介紹了Python測試框架:pytest的相關資料,幫助大家更好的利用python進行單元測試,感興趣的朋友可以了解下
  • Python爬蟲學習?Scrapy框架介紹
    一、Scrapy框架介紹1.
  • Python之爬蟲框架概述
    第二種,拿別人的來用,自己方便了,可是可能就會沒有了深入研究框架的心情,還有可能思路被束縛。不過個人而言,我自己偏向後者。造輪子是不錯,但是就算你造輪子,你這不也是在基礎類庫上造輪子麼?能拿來用的就拿來用,學了框架的作用是確保自己可以滿足一些爬蟲需求,這是最基本的溫飽問題。倘若你一直在造輪子,到最後都沒造出什麼來,別人找你寫個爬蟲研究了這麼長時間了都寫不出來,豈不是有點得不償失?
  • Appium+Python做移動端自動化測試
    第一章 導言  1.1 編制目的  該文檔為選用Appium作為行動裝置原生(Native)、混合(Hybrid)、移動Web(Mobile Web)應用UI自動化測試的相關自動化測試人員、開發人員等提供參考。
  • python的pytest框架之命令行參數詳解(上)
    Pytest接口自動化測試框架搭建模板Python基於Hypothesis高級測試庫生成測試數據pytest配置文件pytest.ini的詳細使用Pytest中skip和skipif的具體使用方法python中pytest收集用例規則與運行指定用例詳解python pytest進階之xunit fixture詳解python使用pytest接口自動化測試的使用python單元測試之pytest
  • selenium+python自動化96-執行jquery報:$ is not defined
    前言背景介紹:做wap頁面自動化的時候,把url地址直接輸入到瀏覽器(chrome瀏覽器有手機wap模式)上測試,有個按鈕死活點不到,用wap模式的觸摸事件也無法解決
  • 五分鐘學會Python網絡爬蟲
    二、爬蟲語言目前主流的Java、Node.js、C#、python等開發語言,都可以實現爬蟲。所以,在語言的選擇上,你可以選擇最擅長的語言來進行爬蟲腳本的編寫。目前爬蟲這塊用的最多的是python,因為python語法簡潔,方便修改,而且python裡有多爬蟲相關的庫,拿過來就可以使用,網上的資料也比較多。
  • 爬蟲教程:五分鐘帶你學會Python網絡爬蟲
    細分下來,業內分為兩類:爬蟲和反爬蟲。反爬蟲:顧名思義,就是防止你來我網站或APP上做爬蟲的。爬蟲工程師和反爬蟲工程師是一對相愛相殺的小夥伴,經常因為對方要加班寫代碼,甚至丟掉工作。所以,在語言的選擇上,你可以選擇最擅長的語言來進行爬蟲腳本的編寫。目前爬蟲這塊用的最多的是python,因為python語法簡潔,方便修改,而且python裡有多爬蟲相關的庫,拿過來就可以使用,網上的資料也比較多。
  • Python爬蟲推薦用什麼框架呢?
    那麼,Python爬蟲一般用什麼框架比較好呢?一般來講,只有在遇到比較大型的需求時,才會使用Python爬蟲框架。這樣的做的主要目的,是為了方便管理以及擴展。本文神龍代理IP將向大家推薦十個Python爬蟲框架。
  • 適合新手學習的Python爬蟲書籍
    Python編程 從入門到實踐本書是一本針對所有層次的Python讀者而作的Python入門書。第一部分重點介紹網絡數據採集的基本原理:如何用Python從網絡伺服器請求信息,如何對伺服器的響應進行基本處理,以及如何以自動化手段與網站進行交互。第二部分介紹如何用網絡爬蟲測試網站,自動化處理,以及如何通過更多的方式接入網絡。
  • 五分鐘帶你學會Python網絡爬蟲
    細分下來,業內分為兩類:爬蟲和反爬蟲。反爬蟲:顧名思義,就是防止你來我網站或APP上做爬蟲的。爬蟲工程師和反爬蟲工程師是一對相愛相殺的小夥伴,經常因為對方要加班寫代碼,甚至丟掉工作。所以,在語言的選擇上,你可以選擇最擅長的語言來進行爬蟲腳本的編寫。目前爬蟲這塊用的最多的是python,因為python語法簡潔,方便修改,而且python裡有多爬蟲相關的庫,拿過來就可以使用,網上的資料也比較多。
  • Python 爬蟲利器 Selenium 從入門到進階
    作者 | 俊欣來源 | 關於數據分析與可視化今天小編就來講講selenium,我們大致會講這些內容selenium的簡介與安裝selenium是最廣泛使用的開源Web UI自動化測試套件之一,它所支持的語言包括C++、Java、Perl、PHP、Python和Ruby,在數據抓取方面也是一把利器,能夠解決大部分網頁的反爬措施