使用Postman或requests結合chromedriver模擬Selenium操作瀏覽器


Selenium是一款瀏覽器自動化測試框架,基於Webdriver協議。
從本質上來說:

  • webdriver是一套接口標准,使用標准的HTTP RESTful接口,使用JSON格式傳遞數據。
  • chromedriver是實現該標准的Chrome瀏覽器的一套驅動服務。
  • Selenium實際上是對各種接口操作的封裝

seleniumwebdriver.remote.remote_connection中代碼如下圖:

既然是HTTP接口,那么不使用Selenium,使用Postman或requests便能完成瀏覽器的操作。

啟動webdriver接口服務

如果你的chromedriver已經放置在環境變量路徑中,直接在命令行輸入chromedriver即可啟動服務,輸出信息如下:

$  chromedriver
Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614}) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.

默認端口號為9515,即接口地址為:http://127.0.0.1:9515

使用Postman操作瀏覽器

Webdriver API參考

新建瀏覽器會話

Webdriver協議中一般使用POST請求, 數據使用JSON格式發送,即使不需要參數也要傳遞{}的JSON數據。
新建會話的接口及數據如下,新建會話時同capabilities指定要啟動瀏覽器的選項。

POST http://127.0.0.1:9515/session
{
	"capabilities": {"browserName": "chrome"}
}

Postman中的請求設置如下圖所示:

響應中會返回一個sessionId,如:06e32bb38efb7e182bd20dc5c975d3ae,這個sessionId就代表這個瀏覽器(會話)。

打開指定網址

接口及數據為:

POST http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae/url
{"url": "https://www.baidu.com/"}

最大化窗口

接口及數據為:

POST http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae/window/maximize
{}

元素定位

接口及數據為:

POST http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae/element
{"using": "css selector", "value": "#kw"}

這里的using支持以下5種:

  • "css selector"
  • "tag name"
  • "xpath"
  • "link text"
  • "partial link text"

Selenium中的find_element_by_id(), find_element_by_name()和find_element_by_class_name()實際上用的是css selector。

  • id="kw":相當於 css selector "#kw"
  • class_name="card":相當於 css selector ".card"
  • name="info":相當於 css selector "[name=info]"

執行后響應中會返回元素id,如:eef207e2-59c1-429d-9425-f1fd2da93c35,代表這個元素。

元素操作

輸入操作接口數據為:

POST http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae/element/eef207e2-59c1-429d-9425-f1fd2da93c35/value
{"text": "大贏家"} 

注意session/后面的是sessionId, element/后面是元素id

執行后瀏覽器顯示如下圖所示:

刪除會話

請求數據為:

DELETE http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae
{}

使用requests自動操作瀏覽器

  1. 手動啟動chromedriver
  2. 編寫請求腳本,如下。
import requests

# 新建會話
res_dict = requests.post('http://127.0.0.1:9515/session',
                         json={"capabilities": {"browserName": "chrome"}}).json()
sessionId = res_dict.get('value').get('sessionId')

# 打開百度
requests.post(f'http://127.0.0.1:9515/session/{sessionId}/url',
              json={"url": "https://www.baidu.com/"})

# 最大化窗口
requests.post(f'http://127.0.0.1:9515/session/{sessionId}/window/maximize',
              json={})

# 定位搜索框
res_dict = requests.post(f'http://127.0.0.1:9515/session/{sessionId}/element',
                         json={"using": "css selector", "value": "#kw"}).json()
elementId = list(res_dict.get('value').values())[0]

# 輸入文本
requests.post(f'http://127.0.0.1:9515/session/{sessionId}/element/{elementId}/value',
              json={"text": "大贏家"})

# 退出瀏覽器
requests.delete(f'http://127.0.0.1:9515/session/{sessionId}',
                json={})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM