python + selenium/appnium

Selenium 的自動化原理:

selenium 自動化流程:

  1. 自動化程序調用Selenium 客戶端庫函數(比如點擊按鈕元素)
  2. 客戶端庫會發送Selenium 命令 給瀏覽器的驅動程序
  3. 瀏覽器驅動程序接收到命令后 ,驅動瀏覽器去執行命令
  4. 瀏覽器執行命令
  5. 瀏覽器驅動程序獲取命令執行的結果,返回給我們自動化程序
  6. 自動化程序對返回結果進行處理

google瀏覽器驅動:Chrome Driver

瀏覽器驅動更新,第三方庫 webdriver-manager

語句:ChromeDriverManager.install()

from selenium import webdriver

from selenium.webdriver.common.by import By? 升級到selenium4

wd = webdriver.Chrome()

輸入框輸入字符串使用 send_keys()

輸入之前使用element.clear() # 清除輸入框已有的字符串

點擊元素clik

根據class/ id/tag

wd.find_elements(By.CLASS_NAME, 'animal')

wd.find_element(By.ID, 'kw')

wd.find_elements(By.TAG_NAME, 'div')

獲取文本??element = wd.find_element(By.ID, 'animal')

? ? ? ? ? ? ? ? ?print(element.text)

獲取元素的屬性值 element.get_attribute('class')

關閉瀏覽器窗口?wd.quit()

獲取整個元素對應的HTML文本內容?element.get_attribute('outerHTML')

獲取某個元素內部的HTML文本內容?element.get_attribute('innerHTML')

獲取輸入框里的文字?element.get_attribute('value')

獲取文本顯示所有內容 element.get_attribute('textContent')

CSS

css selector? css 選擇器

1.tag名

elements = wd.find_elements(By.CSS_SELECTOR, 'div')??

2.id屬性值? ?#id值

element = wd.find_element(By.CSS_SELECTOR, '#searchtext')

3.class屬性值? ?.class值

elements = wd.find_elements(By.CSS_SELECTOR, '.animal')

4.直接子元素和后代元素? 后代元素包含直接子元素

? ?直接子元素中間沒有其他層

? ?直接子元素表示? 元素a > 元素b

? ?后代元素表示? ? ? 元素a? ? 元素b

5.其他屬性

? ?語法使用 [ ]

? ?例子:選擇屬性href值為 http://www.miitbeian.gov.cn 的元素

? ? ? ? ? ? ?element = wd.find_element(By.CSS_SELECTOR, '[href="http://www.miitbeian.gov.cn"]')

? ? ? ? ? ? a.不指定屬性值? [href]

? ? ? ? ? ? b.加上標簽名的限制?div[class='SKnet']?

? ?例子:href屬性包含了 miitbeian 字符串??[href*="miitbeian"]

? ? ? ? ? ? ??href屬性以 http 開頭?[href^="http"]

? ? ? ? ? ? ??href屬性以 gov.cn 結尾?[href$="gov.cn"]

?6.css選擇器可以 使用 逗號 ,稱之為 組選擇?

? ? 例子:同時選擇所有tag名為div的元素??id為BYHY的元素??div,#BYHY

7.選擇的元素是父元素的第幾個子節點

? ?nth-child

? ?例子:第2個子元素,并且是span類型? span: nth-child(2)

??選擇的元素是父元素的倒數第幾個子節點

? nth-last-child

? 例子:選擇第倒數第1個子元素,并且是p元素 p:nth-last-child(1)

? 父元素的第幾個某類型的子節點

? ?nth-of-type

元素緊跟關系的是加號
h3 后面所有的兄弟節點 span??h3 ~ span

frame切換

wd.switch_to.frame(frame_reference)??frame_reference是name屬性值或者id

回原來的主html

wd.switch_to.default_content()

窗口的切換

切換到新窗口的操作

WebDriver對象有window_handles 屬性,這是一個列表對象, 里面包括了當前瀏覽器里面所有的窗口句柄。

for handle in wd.window_handles:
? ? # 先切換到該窗口
? ? wd.switch_to.window(handle)
? ? # 得到該窗口的標題欄字符串,判斷是不是我們要操作的那個窗口
? ? if 'Bing' in wd.title:
? ? ? ? # 如果是,那么這時候WebDriver對象就是對應的該該窗口,正好,跳出循環,
? ? ? ? break

wd.switch_to.window(handle)? ? --??handle 句柄對應網頁窗口的id

# mainWindow變量保存當前窗口的句柄
mainWindow = wd.current_window_handle

8.radio/checkbox框選擇選項,直接用WebElement的click方法

??element = wd.find_element(By.CSS_SELECTOR, '#s_radio input[name="teacher"]:checked')

??:checked 是CSS偽類選擇,表示選擇 checked 狀態的元素,對 radio 和 checkbox 類型的input有效

? select選擇框 selenium提供了一個select類

? ?select_by_value

? ?select_by_index

? ?去除選擇

? ?deselect_by_value

Xpath

根節點用/

相對路徑用// 從當前節點往下找

*?是一個通配符

所有div節點的所有直接子節點??//div/*

Xpath 可以根據屬性來選擇元素

[@屬性名='屬性值']

style屬性值 包含 color 字符串的 頁面元素?//*[contains(@style,'color')]

選擇 style屬性值 以 color 字符串 開頭 的 頁面元素//*[starts-with(@style,'color')]

?p類型第2個的子元素? p[2]

?選取p類型倒數第1個子元素 p[last()]

Xpath用豎線表示多個組合選擇

元素的父節點用 /..

xpath也可以選擇 后續 兄弟節點,用這樣的語法 following-sibling::

xpath還可以選擇 前面的 兄弟節點,用這樣的語法 preceding-sibling::

Selenium常用的等待包括顯式等待、隱式等待、強制等待

隱式等待是整個頁面的等待。設置一個最長的等待時間,在規定時間內整個頁面加載完成,則執行下一步,否則繼續等待直到最長等待時間結束

? ? ? ? ? ? ? ? implicitly_wait(時間)

顯式等待是針對某個元素的等待。在設置時間內,默認每隔一段時間檢測一次當前頁面某個元素是否存在

? ? ? ? ? ? ? WebDriverWait 類,與until() 和until_not() 結合

強制等待:time.sleep()

appium

appium 測試移動端應用? appium 繼承了webdriver

selenium?測試Web應用

鏈接地址:www.byhy.net

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697446.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697446.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697446.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu環境下openssl庫的簡單使用

安裝 sudo apt-get install libssl-devaes算法demo 編譯&#xff1a;gcc aes.c -lssl -lcrypto -o aes 運行&#xff1a;./aes #include<stdio.h> #include<stdlib.h> #include<string.h> #include<openssl/aes.h>#define AES_KEY_SIZE 128 // AES密…

UNI-APP_app跳轉企業微信客服對話

uniapp打包app&#xff0c;app里點擊客服&#xff0c;跳轉企業微信客服對話。為什么是企業微信&#xff1f;因為只有微信小程序才可以通過 button 的 open-type‘share’ 打開微信客服對話框&#xff08;微信客服要在公眾號平臺配置&#xff09; 1、appId獲取 &#xff08;1&a…

OJAC近嶼智能張立賽博士揭秘GPT Store:技術創新、商業模式與未來趨勢

> - [Look&#xff01;&#x1f440;我們的大模型商業化落地產品](https://www.airecruitas.com/aigc) >- &#x1f4d6;更多AI資訊請&#x1f449;&#x1f3fe;[關注](https://mp.weixin.qq.com/s/85qwuIydaaydMQz2g0rgMA) >- [Free三天集訓營助教在線為您火熱答疑…

C#_各式各樣的參數(引用參數、輸出參數、數組參數、具名參數、可選參數)

引用參數 值參數和引用參數的區別在于傳參時是否會創建參數副本&#xff1a;值參數不會創建副本&#xff0c;而引用參數會創建副本。 換言之&#xff0c;值類型參數的參數與實體之間無直接關聯&#xff0c;修改參數不會對實體產生影響&#xff1b;引用類型參數的參數與實體可視…

6.微格式

微格式 經典真題 知道什么是微格式嗎&#xff1f;談談理解。在前端構建中應該考慮微格式嗎&#xff1f; 微格式介紹 所謂微格式&#xff0c;是建立在已有的、被廣泛采用的標準基礎之上的一組簡單的、開放的數據格式。 具體表現是把語義嵌入到 HTML 中&#xff0c;以便有助…

通過SSH 可以訪問Ubuntu Desktop嗎?

你可以在 Ubuntu Desktop 上開啟 SSH 服務&#xff0c;以便其他機器可以通過 SSH 連接到你的服務器。以下是在 Ubuntu Desktop 上開啟 SSH 服務的步驟&#xff1a; 打開終端 (Terminal) 應用程序。 輸入以下命令安裝 OpenSSH 服務器&#xff1a; sudo apt-get update sudo ap…

多任務爬蟲(多線程和多進程)

在一臺計算機中&#xff0c;我們可以同時打開多個軟件&#xff0c;例如同時瀏覽網頁、聽音樂、打字等&#xff0c;這是再正常不過的事情。但仔細想想&#xff0c;為什么計算機可以同時運行這么多軟件呢? 這就涉及計算機中的兩個名詞&#xff1a;多進程和多線程。 同樣&#xf…

通信入門系列——鎖相環、平方環、Costas環

微信公眾號上線&#xff0c;搜索公眾號小灰灰的FPGA,關注可獲取相關源碼&#xff0c;定期更新有關FPGA的項目以及開源項目源碼&#xff0c;包括但不限于各類檢測芯片驅動、低速接口驅動、高速接口驅動、數據信號處理、圖像處理以及AXI總線等 本節目錄 一、鎖相環 1、壓控振蕩…

重磅!MongoDB推出Atlas Stream Processing公共預覽版

日前&#xff0c;MongoDB宣布推出Atlas Stream Processing公共預覽版。 在Atlas平臺上有興趣嘗試這項功能的開發者都享有完全的訪問權限&#xff0c;可前往“閱讀原文”鏈接點擊了解更多詳細信息或立即開始使用。 開發者喜歡文檔型數據庫的靈活性、易用性以及Query API查詢方…

使用k-近鄰算法改進約會網站的配對效果(kNN)

目錄 谷歌筆記本&#xff08;可選&#xff09; 準備數據&#xff1a;從文本文件中解析數據 編寫算法&#xff1a;編寫kNN算法 分析數據&#xff1a;使用Matplotlib創建散點圖 準備數據&#xff1a;歸一化數值 測試算法&#xff1a;作為完整程序驗證分類器 使用算法&…

js過濾取出對象中改變的屬性和值

朋友公司的面試題 &#xff0c;取出對象中被改變的屬性和值 const obj1 { a: 1, b: 2, c: 4 }; const obj2 { a: 1, b: 2, c: 5 }; 方法1 function testFun(obj1, obj2) {const diff {};const keys1 Object.keys(obj1);const keys2 Object.keys(obj2);const allKyes keys…

【深度學習】Gemini 1.0 Pro 如何讓chatGPT扮演stable diffusion的提示詞工程師

google也出了一個chatGPT&#xff0c;免費申請使用&#xff1a; https://aistudio.google.com/app/prompts/new_chat https://github.com/google/generative-ai-docs/blob/main/site/en/tutorials/rest_quickstart.ipynb 模型信息&#xff1a; $ curl https://generativelan…

SpringCloud(14)之SpringCloud Consul

我們知道 Eureka 2.X 遇到困難停止開發了&#xff0c;所以我們需要尋找其他的替代技術替代Eureka&#xff0c;這一小 節我們就講解一個新的組件Consul。 一、Consul介紹 Consul 是 HashiCorp 公司推出的開源工具&#xff0c;用于實現分布式系統的服務發現與配置。與其它分布式…

kali xrdp

Kali Linux 使用遠程桌面連接——xrdp&xfce_kali xfce桌面-CSDN博客 Ubuntu/Debian/Kali xrdp遠程桌面黑屏/空屏/無畫面解決辦法 - 知乎 (zhihu.com) sudo apt-get install xrdp -y sudo apt-get install xfce4 -ysudo systemctl enable xrdp --now systemctl status xrd…

中級.NET開發工程師面試經歷

文章目錄 前言面試題目&#xff08;只記錄了還記得的部分&#xff09;一.簡單說下.NETCORE的生命周期&#xff1f;二.C#如何保證在并發情況下接口不會被重復觸發&#xff1f;三.引用類型和值類型有什么區別&#xff1f;四.那怎樣能讓引用類型和值類型一樣&#xff0c;在賦值的時…

【Latex】TeXstudio編譯器選項修改

1、動機 編譯國科大博士畢業答辯論文latex時報錯 Package ctable Error: You must load ctable after tikz. 2、方法 經過搜索發現是因為這是中文模板&#xff0c;編譯的選項不對&#xff0c;需要從 PDFLaTeX 調整到 XeLaTeX。于是操作如下 1&#xff09;點擊選項 2&#xf…

linux 文件目錄操作命令【重點】

目錄 ls cd cat more tail【工作中使用多】 mkdir rmdir rm ls 作用: 顯示指定目錄下的內容 語法: ls [-al] [dir] 說明: -a 顯示所有文件及目錄 (. 開頭的隱藏文件也會列出) -l 除文件名稱外&#xff0c;同時將文件型態(d表示目錄&#xff0c;-表示文件)、權限…

SpringMVC POST請求傳參 屬性名字母大寫注入失敗解決方案

問題描述&#xff1a; 我現在有一個接口通過一個實體(RequestBody)去接收一系列的參數&#xff0c;前端傳參為一個JSON字符串&#xff0c;但是當我的屬性名以大寫字母開頭(有的中間還有下劃線)&#xff0c;或者第二個字母是大寫字母的時候&#xff0c;我發現后端接收不到參數值…

Flask——基于python完整實現客戶端和服務器后端流式請求及響應

文章目錄 本地客戶端Flask服務器后端客戶端/服務器端流式接收[打字機]效果 看了很多相關博客&#xff0c;但是都沒有本地客戶端和服務器后端的完整代碼示例&#xff0c;有的也只說了如何流式獲取后端結果&#xff0c;基本沒有講兩端如何同時實現流式輸入輸出&#xff0c;特此整…

C++字符串類

C中有兩種主要的字符串類&#xff1a;std::string 和 std::wstring。 std::string std::string 是 C 標準庫中用于處理 ASCII 字符串的類。它提供了豐富的方法來操作字符串&#xff0c;包括插入、刪除、查找子串、比較等功能。使用 std::string 需要包含頭文件 <string>…