web 自動化之 selenium 元素四大操作三大切換等待

文章目錄

      • 一、元素的四大操作
      • 二、三大切換&等待
        • 1、切換窗口:當定位的元素不在當前窗口,則需要切換窗口
        • 2、切換iframe:當定位的元素在frame/iframe,則需要切換
        • 3、切換彈出窗口

一、元素的四大操作

1、輸入
2、點擊
3、獲取文本
4、獲取屬性

import time
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver=webdriver.Edge()
driver.get("http://www.baidu.com")
time.sleep(2)
el1=driver.find_element(By.ID,"kw")
# 輸入
el1.send_keys()
# 點擊
el1.click()
# 獲取元素文本內容
el2=driver.find_element(By.LINK_TEXT,"新聞")
print("打印該元素的文本內容:",el2.text)
# 獲取元素的屬性
print("獲取autocomplete屬性值:",el1.get_attribute("autocomplete"))

二、三大切換&等待

元素定位不到可能的原因:

  • 1、定位語句不對
  • 2、是否加等待
  • 3、元素嵌套在iframe/frame元素標簽中(切換frame);多層嵌套frame/iframe
  • 4、要定位的元素非當前窗口(切換句柄)
1、切換窗口:當定位的元素不在當前窗口,則需要切換窗口
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
"""
元素等待:
1、強制等待 time.sleep(秒數) 停留
2、智能等待(隱士等待) driver.implicitly_wait(秒數) 給頁面上所有的元素設置全
局等待時間
只要在設置的時間范圍內找到了元素,就會執行下一個代碼,最多等待設置的時間
3、顯示等待 顯示等待:等待當前需要操作的元素 基于多種條件+等待元素
多種條件:等待元素可見?等待url跳轉為xxx?等待新窗口出現?很多場景條件
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
自動化測試框架腳本:
以顯示等待為主
以強制等待為輔
"""driver=webdriver.Edge()
# 智能等待
# driver.implicitly_wait(10)
driver.get("https://www.baidu.com")
# 輸入搜索內容
el1=driver.find_element(By.ID,"kw")
el1.send_keys("chrome")
#點擊百度一下
el2=driver.find_element(By.ID,'su')
el2.click()
# 顯示等待
loc=(By.XPATH,'//*[@id="2"]/div/h3/a')
# 等待元素存在
WebDriverWait(driver,15,1).until(ec.presence_of_element_located(loc))
# 點擊搜索的內容
el3=driver.find_element(*loc)
el3.click()
# 新打開的窗口里面定位元素 需要切換窗口
# 獲取瀏覽器窗口列表 最早打開的窗口放到list的最前面
wins=driver.window_handles
print(wins)
# 切換最后打開的窗口
driver.switch_to.window(wins[1])
el4=driver.find_element(By.XPATH,'//*[@id="J-lemma-main-wrapper"]/div[2]/div/div[1]/div/div[2]/div[1]/div/a[1]')
el4.click()
# 為了看到效果
time.sleep(3)
driver.close()
2、切換iframe:當定位的元素在frame/iframe,則需要切換
"""
定位的元素包含在iframe/frame標簽里面
切換到iframe/frame
"""
import time
from selenium.webdriver.support import expected_conditions as ecfrom selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWaitdriver=webdriver.Edge()
driver.get("https://www.csdn.net/")
driver.implicitly_wait(5)
driver.find_element(By.XPATH,'//a[@class="toolbar-btn-loginfun"]').click()
time.sleep(2)
# 切換iframe 方式一:id
# driver.switch_to.frame("id")
# 切換iframe 方式二:索引 索引值從0開始
# driver.switch_to.frame(3)
# 切換iframe 方式三:找到iframe元素
driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="passportbox"]/iframe'))
# 再定位元素
driver.find_element(By.XPATH,'/html/body/div/div/div/div[2]/div[2]/div[1]/div[1]/span[3]').click()
time.sleep(2)
driver.close()
# # 切換當前 iframe/frame 上一級 iframe/frame 元素
# driver.switch_to.parent_frame()
# # 返回第一代 iframe/frame
# driver.switch_to.default_content()
3、切換彈出窗口

彈窗處理: driver.switch_to.alert

import time
from selenium.webdriver.common.by import By
from selenium import webdriverdriver=webdriver.Edge()
driver.get(r"E:/Notepad++/test3.html")el=driver.find_element(By.XPATH,"/html/body/form[1]/input[6]")
time.sleep(2)
el.click()
# 彈窗進行處理
alert=driver.switch_to.alert
print(alert.text)
# 點擊確認
time.sleep(2)
alert.accept()time.sleep(2)
driver.close()

注:E:/Notepad++/test3.html 文件內容見 Web 自動化之 HTML & JavaScript 詳解 中的二、javascript 腳本代碼

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

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

相關文章

window server 2012安裝sql server2008 r2

執行sql server2008 r2安裝目錄下的setup 選擇運行程序而不獲取幫助 然后就是讓人絕望的 只能先搞這個了,F*微軟,自家軟件不讓正常安裝 打開服務器管理器->添加角色和功能->選擇Web 服務(IIS)->添加.NET Framework3.5 然…

【K8S學習之生命周期鉤子】詳細了解 postStart 和 preStop 生命周期鉤子

0. 參考 Kubernetes容器生命周期 —— 鉤子函數詳解(postStart、preStop) - 人艱不拆_zmc - 博客園詳解Kubernetes Pod優雅退出 - 人艱不拆_zmc - 博客園 1. Kubernetes 生命周期鉤子概述 在 Kubernetes 中,生命周期鉤子(Lifec…

測試文章標題01

模型上下文協議(Model Context Protocol, MCP)深度解析 一、MCP的核心概念 模型上下文協議(Model Context Protocol, MCP)是一種用于規范機器學習模型與外部環境交互的標準化框架。其核心目標是通過定義統一的接口和數據格式&am…

kubuntu系統詳解

Kubuntu 系統深度解析(從系統架構到用戶體驗) 一、定位與核心特性 Kubuntu 是 Ubuntu 的官方 KDE 衍生版,基于 Ubuntu 的穩定底層(Debian 技術棧),搭載 KDE Plasma 桌面環境,主打 “功能豐富、…

cURL:通過URL傳輸數據的命令行工具庫介紹

文章目錄 1. 什么是 curl?2. 下載與安裝 curl3. curl 的常見用法3.1 獲取網頁內容3.2 下載文件3.3 發送 POST 請求(帶表單數據)3.4 發送帶 JSON 的 POST 請求 1. 什么是 curl? cURL(CommandLine URL)是非常…

從零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案

文章目錄 前言1. 安裝Ollama2.Gemma3模型安裝與運行3. 安裝Open WebUI圖形化界面3.1 Open WebUI安裝運行3.2 添加模型3.3 多模態測試 4. 安裝內網穿透工具5. 配置固定公網地址總結 前言 如今各家的AI大模型廝殺得如火如荼,每天都有新的突破。今天我要給大家安利一款…

Element Plus對話框(ElDialog)全面指南:打造靈活彈窗交互

📌 開篇導語 對話框是Web應用中實現用戶交互的核心組件之一,常用于信息確認、表單提交或詳情展示。Element Plus的ElDialog組件以高擴展性和優雅動效著稱,支持高度定制化開發。本文將從基礎配置到進階技巧,手把手教你掌握對話框組…

解決WSL、Ubuntu的.ico圖標不正確顯示縮略圖

解決WSL、Ubuntu的.ico圖標不正確顯示縮略圖 問題描述 Win10系統中由于更新了某些軟件,篡改了默認的圖像顯示軟件,導致WSL等軟件未能成功顯示圖標,表現如下: 解決方法 將ico文件的默認打開方式更改為“畫圖”,如下…

[數據結構高階]并查集初識、手撕、可以解決哪類問題?

標題:[數據結構高階]并查集初識、手撕、可以解決哪類問題? 水墨不寫bug 文章目錄 一、認識并查集二、模擬實現并查集三、用并查集解決問題1、[省份的數量](https://leetcode.cn/problems/number-of-provinces/)2、[等式方程的可滿足性](https://leetcode…

如何快速入門大模型?

學習大模型的流程是什么 ? 提示詞工程:只需掌握提問技巧即可使用大模型,通過優化提問方式獲得更精準的模型輸出套殼應用開發:在大模型生態上開發業務層產品(如AI主播、AI小助手等),只需調用API…

《AI大模型應知應會100篇》第59篇:Flowise:無代碼搭建大模型應用

第59篇:Flowise:無代碼搭建大模型應用 摘要:本文將詳細探討 Flowise 無代碼平臺的核心特性、使用方法和最佳實踐,提供從安裝到部署的全流程指南,幫助開發者和非技術用戶快速構建復雜的大模型應用。文章結合實戰案例與配…

python打卡day23@浙大疏錦行

知識回顧: 1. 轉化器和估計器的概念 2. 管道工程 3. ColumnTransformer和Pipeline類 作業: 整理下全部邏輯的先后順序,看看能不能制作出適合所有機器學習的通用pipeline 一、導入數據庫 import pandas as pd import numpy as np import matplo…

Vue.js框架的優缺點

別再讓才華被埋沒,別再讓github 項目蒙塵!github star 請點擊 GitHub 在線專業服務直通車GitHub賦能精靈 - 艾米莉,立即加入這場席卷全球開發者的星光革命!若你有快速提升github Star github 加星數的需求,訪問taimili…

交易流水表的分庫分表設計

交易流水表的分庫分表設計需要結合業務特點、數據增長趨勢和查詢模式,以下是常見的分庫分表策略及實施建議: 一、分庫分表核心目標 解決性能瓶頸:應對高并發寫入和查詢壓力。數據均衡分布:避免單庫/單表數據傾斜。簡化運維&#…

操作系統學習筆記第3章 (竟成)

第 3 章 內存管理 【考綱內容】 1.內存管理基礎: 1.內存管理的基本概念:邏輯地址空間與物理地址空間;地址變換;內存共享;內存保護;內存分配與回收; 2.連續分配管理方式; 3.頁式管理&…

中科院無人機導航物流配送的智能變革!LogisticsVLN:基于無人機視覺語言導航的低空終端配送系統

作者:Xinyuan Zhang, Yonglin Tian, Fei Lin, Yue Liu, Jing Ma, Kornlia Sra Szatmry, Fei-Yue Wang 單位:中國科學院大學人工智能學院,中科院自動化研究所多模態人工智能系統國家重點實驗室,澳門科技大學創新工程學院工程科學系…

1.10-數據傳輸格式

1.10-數據傳輸格式 在對網站進行滲透測試時,使用目標服務器規定的數據傳輸格式來進行 payload 測試非常關鍵 如果不按規定格式發送數據,服務器可能直接拒絕請求或返回錯誤響應,比如: 接口要求 JSON 格式,而你用的是…

dfs 第一次加訓 詳解 下

目錄 P1706 全排列問題 思路 B3618 尋找團伙 思路 B3621 枚舉元組 思路 B3622 枚舉子集(遞歸實現指數型枚舉) 思路 B3623 枚舉排列(遞歸實現排列型枚舉) B3625 迷宮尋路 思路 P6183 [USACO10MAR] The Rock Game S 總結…

通信網絡編程——JAVA

1.計算機網絡 IP 定義與作用 :IP 地址是在網絡中用于標識設備的數字標簽,它允許網絡中的設備之間相互定位和通信。每一個設備在特定網絡環境下都有一個唯一的 IP 地址,以此來確定其在網絡中的位置。 分類 :常見的 IP 地址分為 I…

#在 CentOS 7 中手動編譯安裝軟件操作及原理

在 CentOS 7 中,手動編譯安裝軟件(即從源代碼編譯安裝)是一種高度靈活的方式,適用于需要定制化軟件功能、優化性能或安裝官方倉庫未提供的軟件版本的場景。以下是針對手動編譯安裝的詳細說明,包括原理、步驟、注意事項…