日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【自动化测试爬虫系列】Selenium Webdriver 介绍

發布時間:2024/9/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【自动化测试爬虫系列】Selenium Webdriver 介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.?Selenium Webdriver技術介紹

1.?簡介

selenium Webdriver是一套針對不同瀏覽器而開發的web應用自動化測試代碼庫。使用這套庫可以進行頁面的交互操作,并且可以重復地在不同瀏覽器上進行各種測試操作。

以python為例,在cmd輸入python-m pip install?selenium?--upgrade pip進行安裝。

2.?特點

  • 開源免費

  • 支持多種語言:Java、Python、Ruby、C#、JavaScript、C++等。

  • 直接讓測試工具調用瀏覽器和操作系統本身提供的內置方法,以此繞過JavaScript環境的沙盒限制。

  • 支持多種瀏覽器。包括:Chrome、ie6-11、Firefox大部分版本、Mac操作系統的Safari默認版本、Opera、HtmlUnit、Android手機操作系統的默認瀏覽器、iOS手機操作系統的默認瀏覽器。

3.?實現原理


如圖,測試腳本作為客戶端,在運行腳本的時候,

  • 調用瀏覽器各自的webdriver(如Firefox的geckodriver)并創建session

  • webdriver啟動瀏覽器,并綁定某端口成為Webdriver的Remote Server(作為服務端)

  • 測試腳本發送基于selenium自己設計的The WebDriverWire Protocol協議的命令請求到Remote Server(這套協議幾乎可以操作瀏覽器做任何事情,如打開、關閉、最大化、最小化、元素定位、元素點擊、上傳文件等。)

  • Remote Server將Web Service的命令轉化成瀏覽器native的調用,在瀏覽器中找到元素的坐標位置,并在這個坐標點觸發一個鼠標或鍵盤操作,從而操作瀏覽器。


4.?基本的元素定位方式

根據上述的實現原理,可知用selenium對瀏覽器進行頁面操作的關鍵就是定位出頁面上相應的元素,然后發送基于selenium自己設計的The WebDriver Wire Protocol協議的命令請求。

瀏覽器中,按F12或者各個瀏覽器提供的開發者工具,可查看頁面元素。

Selenium提供了八種定位方式

--id定位?

§用法:find_element_by_id(“id對應的值”)

--name定位?

§用法:find_element_by_name(“name對應的值”)

--class定位

§用法:find_element_by_class_name(“class對應的值”)

--tag定位

§用法:find_element_by_tag_name(“tag對應的值”)

--link定位(用于定位文本鏈接)

§用法:find_element_by_link_text(“鏈接的文本內容”)

--partial link定位(link定位的補充,可取鏈接部分文本內容進行定位)

§用法:find_element_by_partial_link_text(“鏈接的部分文本內容”)

--XPath定位

§用法:find_element_by_xpath(“xpath的值,可選中元素后,鼠標右鍵復制xpath”)

--CSS定位

§用法:find_element_by_css_selector(“CSS路徑,同樣可選中元素后,鼠標右鍵復制CSS路徑”)


還可以用By定位元素(其實就是8種定位方法的另一種較靈活的寫法)

--統一調用find_element()方法,通過By來聲明定位方法(前面提到的8中定位方法),并傳入對應定位方法的定位參數。

§用法:find_element(By.定位方法,“定位參數”)

e.g.?find_element(By.ID,“txtAcc”)

?

二. Linux服務器環境部署注意事項

桌面環境使用Selenium默認會打開瀏覽器界面,但是如果要部署到無桌面環境的服務器環境,使用普通方法沒法運行Selenium。解決方法有:

  • 使用HtmlUnitDriver或者PhantomJSDriver

  • 使用XVFB(X virtual frame buffer)虛擬顯示服務器,不需要借助任何顯示設備,在內存中執行所有的圖形操作。


本文采用安裝Xvfb的方式。部署步驟如下:

1. 安裝pyvirtualdisplay

pip install pyvirtualdisplay

2. 安裝Xvfb(作為后端)

yum install xorg-x11-server-Xvfb

3. 安裝Firefox

cd /usr/local

Wget https://ftp.mozilla.org/pub/firefox/releases/56.0.2/linux-x86_64/en-US/firefox-56.0.2.tar.bz2

tar xjvf firefox-56.0.2.tar.bz2

ln -s /usr/local/firefox/firefox /usr/bin/firefox

4. 下載geckodriver

wget https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-linux64.tar.gz

5. 解壓geckodriver-v0.19.1-linux64.tar.gz

tar xvzf geckodriver-*.tar.gz

6. 在環境變量目錄/usr/bin/中添加geckodriver的硬鏈接

ln -s /usr/local/geckodriver /usr/bin/geckodriver

7. 測試腳本中添加代碼

  • 導入Display模塊

from pyvirtualdisplay import Display?

  • 在創建webdriver實例前,設置Display環境變量。visible傳0表示使用Xvfb作為后端,size傳的參數就是設置瀏覽器頁面大小。

Display = Display(visible=0, size=(1280, 1024))?

  • 啟動虛擬顯示服務

Display.start()?

  • 執行完用例后,關閉瀏覽器后,也需要終止Xvfb進程。

display.sendstop() # 先發送SIGTERM信號給Xvfb,讓Xvfb自行了斷,如果Xvfb進程還在,則繼續發送SIGKILL強制結束Xvfb進程。


部署時可能遇到的坑:

1. 運行webdriver.Firefox()后等待很久報錯并退出,顯示selenium.common.exceptions.WebDriverException: Message: other os error:

可能是版本不兼容,可以把firefox,geckodriver以及selenium全部升級到新版本。


總結

以上是生活随笔為你收集整理的【自动化测试爬虫系列】Selenium Webdriver 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。