seleniumAPI常用操作大全和 API再封裝
前置知識:
selenium環境搭建
CSS選擇器和Xpath選擇器
以下是常用的selenium API的操作方法,但筆者希望用起來更方便一些,所以封裝了常用的操作,檔案上傳到了附件中附件:API再封裝
物件建立
# 匯入相關庫
from selenium import webdriver
import time
# 建立一個瀏覽器物件,其他的見環境搭建
driver = webdriver.Chrome()
# 檢視所有方法
print(dir(driver))
瀏覽器操作
# 設定全屏
driver.maximize_window()
# 設定瀏覽器尺寸
driver.set_window_size(800,600)
# 獲取當前瀏覽器尺寸
size = driver.get_window_size()
print(size)
# 設定瀏覽器位置
driver.set_window_position(0,0)
# 獲取瀏覽器位置
position = driver.get_window_position()
print(position)
# 關閉當前標籤
# driver.close()
# 關閉所有標籤
# driver.quit()
頁面操作
# 請求某個url對應的響應
url = "
driver.get(url)
time.sleep(2)
driver.get(")
# 重新整理頁面
time.sleep(2)
driver.refresh()
# 回退上一個頁面
time.sleep(2)
driver.back()
# 前進一個頁面
time.sleep(2)
driver.forward()
斷言assert操作
driver.get(")
# 獲取當前訪問頁url
print(driver.current_url)
# 獲取當前瀏覽器標題
print(driver.title)
# 儲存快照
driver.get_screenshot_as_file("screeshot01.png") # 方式一
date = driver.get_screenshot_as_png() # 方式二 type(date) --> bytes
with open("screenshot02.png","wb") as f:
f.write(date)
date64 = driver.get_screenshot_as_base64() # 方式三 type(date64) --> str
print(type(date64))
with open("screenshot03.png","w") as f:
f.write(date64)
# 檢視網頁原始碼
sourse = driver.page_source
with open("CSDN.html","wb") as f:
f.write(sourse.encode()) # str to bytes
元素定位的兩種方式
driver.get(")
# 直接呼叫(推薦)
el_search = driver.find_element_by_id("toolbar-search-input") # webelement類例項化物件
print(dir(el_search)) # 檢視element物件中的方法
el_search.send_keys("TEST") # 傳值
el_click = driver.find_element_by_id("toolbar-search-button")
el_click.click()
# 使用By型別
from selenium.webdriver.common.by import By
ele_search = driver.find_element(By.ID,"toolbar-search-input")
ele_search.send_keys("TEST")
ele_click = driver.find_element(By.ID,"toolbar-search-button")
ele_click.click()
元素的八種定位方法
'''
(以下用第一種定位方式舉例)
'''
driver.get(")
driver.find_element_by_css_selector("#app > div > div > div.main > div.main-login > div.main-select > ul > li:nth-child(2) > a").click() #使用賬號密碼登入
# id定位
el_by_id = driver.find_element_by_id("toolbar-search-input")
el_by_id.send_keys("TestID")
# name屬性值定位
el_by_name = driver.find_element_by_name("pwd")
el_by_name.send_keys("TestName")
# 偽類名定位
el_by_className = driver.find_element_by_class_name("user-service-link")
el_by_className.click()
# 標籤名定位
el_by_tagName = driver.find_element_by_tag_name("input")
el_by_tagName.send_keys("TestTagName")
# 連結文字定位(注意是文字,不是href;selenium會自動補全相對連結地址)
el_by_linkText = driver.find_element_by_link_text("首頁")
el_by_linkText.click()
# 部分連結文字
el_by_partialLinkText = driver.find_element_by_partial_link_text("首")
el_by_partialLinkText.click()
# xpath路徑表示式(注意單雙引號區分)
el_by_xpath = driver.find_element_by_xpath('//*[@id="tabTwo"]')
el_by_xpath.click()
# css選擇器定位
el_by_css = driver.find_element_by_css_selector("#app > div > div > div.main > div.main-login > div.main-process-login > div > div.form-group.form-group-link > div > a")
el_by_css.click()
定位一組元素
'''
find_elements_by_xxx,返回一個列表
影片熱榜中的第一條記錄的css路徑:#floor-sp_66 > div > div.rank_list.sp_rank_wrap > ul > li:nth-child(1) > div > div > a > h4
改寫之後獲取所有記錄:#floor-sp_66 > div > div.rank_list.sp_rank_wrap > ul > li > div > div > a > h4
第一條xpath路徑://*[@id="floor-sp_66"]/div/div[2]/ul/li[1]/div/div/a/h4
改寫://*[@id="floor-sp_66"]/div/div[2]/ul/li/div/div/a/h4
其他幾種方法同理
'''
driver.get(")
el_list = driver.find_elements_by_xpath('//*[@id="floor-sp_66"]/div/div[2]/ul/li/div/div/a/h4')
print(el_list)
元素的操作
# # 點選
# element.click()
# # 清空和輸入(只能操作可輸入的文字框)
# element.clear()
# element.send_keys()
#
# # 提交
# element.submit()
#
# # 獲取文字內容
# element.text
# # 獲取屬性值
# element.get_attribute("attrName")
# # 獲取元素尺寸
# element.size
# # 獲取元素是否可見
# element.is_displayed()
# 例:獲取影片熱榜中的標題
for el in el_list:
print("標題:",el.text)
多標籤之間的切換
driver.get(")
driver.find_element_by_link_text("Python").click()
driver.find_element_by_link_text("Java").click()
# 獲取所有視窗的控制程式碼,返回一個列表儲存每一個視窗控制程式碼值
handles = driver.window_handles
# 透過視窗的控制程式碼切換
time.sleep(2)
driver.switch_to.window(handles[0])
print(driver.title)
多表單的切換
'''
iframe/frame --> 引用了其他頁面的連結,但真正的頁面資料並不出現在當前頁面原始碼中
'''
driver.get(")
el_frame = driver.find_element_by_tag_name("iframe") # 有反爬措施,id會改變
print(el_frame)
# 切換進入表單中
time.sleep(2)
driver.switch_to.frame(el_frame) # 方式一:先定位,後切換
# driver.switch_to.frame("id") # 方式二:也可以直接使用id進行切換(如果有固定id的話)
el_user = driver.find_element_by_name("email")
el_user.send_keys("TestUser")
# 切換進入最外層頁面
driver.switch_to.default_content()
# 切換進入上層頁面
driver.switch_to.parent_frame()
滑鼠常用操作
'''
滑鼠常用操作 ActionChains()類
'''
driver.get(")
from selenium.webdriver import ActionChains
el_logo = driver.find_element_by_css_selector("#csdn-toolbar > div > div > div.toolbar-container-left > div > a > img")
# 滑鼠右擊操作,操作前需要將元素定位出來並傳入相應的動作中;如果要執行操作,需要呼叫perform()
ActionChains(driver).context_click(el_logo).perform()
# 滑鼠雙擊操作
ActionChains(driver).double_click(el_logo).perform()
el_float = driver.find_element_by_css_selector("#floor-sp_66 > div > div.card_list.sp_card_wrap > div.card_list_wrap > div:nth-child(1) > a > div > div.video > div")
# 滑鼠懸停操作
time.sleep(2)
ActionChains(driver).move_to_element(el_float).perform()
鍵盤常用操作
'''
鍵盤常用操作 Keys類配合send_keys使用
'''
driver.get(")
el_search = driver.find_element_by_id("toolbar-search-input")
el_search.send_keys("selenium")
from selenium.webdriver.common.keys import Keys
# 全選
time.sleep(1)
el_search.send_keys(Keys.CONTROL,"a")
# 剪下
time.sleep(1)
el_search.send_keys(Keys.CONTROL,"x")
# 貼上
time.sleep(1)
el_search.send_keys("hello "+Keys.CONTROL,"v")
# 刪除
el_search.send_keys(Keys.BACKSPACE) # BACK_SPACE = BACKSPACE
警告框操作
driver.get(")
driver.find_element_by_id("s-usersetting-top").click()
driver.find_element_by_class_name("setpref").click()
time.sleep(2)
driver.find_element_by_css_selector("#se-setting-7 > a.prefpanelgo.setting-btn.c-btn.c-btn-primary").click()
# 進入警告框中
driver.switch_to.alert()
# 進入警告框中,並點選接受
time.sleep(2)
driver.switch_to.alert.accept()
# 進入警告框中,並解散警告框
time.sleep(2)
driver.switch_to.alert.dismiss()
# 傳送文字到警告框
# driver.switch_to.alert.send_keys("data")
下拉框操作
'''
下拉框操作 Select類,需要傳入物件
'''
driver.get(")
time.sleep(3)
driver.find_element_by_xpath('//*[@id="id_sc"]').click()
time.sleep(1)
driver.find_element_by_css_selector("#hbsettings > div > div.hb_title_col").click()
time.sleep(1)
driver.find_element_by_css_selector("#hbsettree > a:nth-child(4) > div > div.hb_title_col").click()
from selenium.webdriver.support.select import Select
time.sleep(1)
ele_select = driver.find_element_by_id("rpp")
# 將定位到的下拉框元素傳入Select類中
selObj = Select(ele_select)
# 呼叫相應方法選擇下拉框中的選項
time.sleep(1)
selObj.select_by_index("0") # 透過索引選擇,str
time.sleep(1)
selObj.select_by_value("10") # 透過value值選擇
time.sleep(1) 大連婦科醫院哪家好
selObj.select_by_visible_text("50") # 透過文字選擇
all = selObj.all_selected_options # 檢視所有已選
first = selObj.first_selected_option # 檢視第一個已選
isMu = selObj.is_multiple # 檢視是否多選
opt = selObj.options # 檢視選項元素列表
print(all,first,isMu,opt)
呼叫JS程式碼
driver.get(")
# 頁面滾動
js1 = "window.scrollTo(0,2000)"
js2 = "var q = document.documentElement.scrollTop = 500"
driver.execute_script(js1)
time.sleep(2)
driver.execute_script(js2)
# 迴圈下拉滾動
for i in range(20):
js = "window.scrollTo(0,%s)" %(i*100)
driver.execute_script(js)
time.sleep(0.5)
瀏覽器等待的三種方式
'''
瀏覽器等待
三種方式:
1.顯式等待 --> 根據條件進行等待,等待條件出現
2.隱式等待(推薦) --> 嘗試發現某個元素的時候,如果沒能立刻發現,就等待固定長度的時間
3.固定等待 --> time.sleep,即使載入完了也要等待,浪費時間
'''
driver.get(")
# 顯式等待
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver,timeout=10,poll_frequency=0.5,ignored_exceptions=None).until(EC.presence_of_element_located((By.ID,"toolbar-search-input"))) # 在設定的時間內,預設每隔一段時間檢測一次當前頁面元素是否存在,如果超過時間檢測不到則丟擲異常
# 隱式等待
driver.implicitly_wait(10) # 單位為秒,為最大值;在這個最大值內只要定位到就結束等待,否則報錯
cookies操作
driver.get(")
# 獲取cookies --> 字典dict格式
cookies = driver.get_cookies()
print(cookies)
# 獲取key對應的值
# driver.get_cookie(keyName)
# 刪除指定名稱的cookie
# driver.delete_cookie(name="xx")
# 刪除所有cookies
driver.delete_all_cookies()
# 設定cookies
cookie = {'domain': '.csdn.net', 'expiry': 1645971310, 'httpOnly': False, 'name': 'Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac', 'path': '/', 'secure': False, 'value': '6525*1*10_18797500640-1614435306890-873769'}
driver.add_cookie(cookie)
print(driver.get_cookies())
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2760924/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 熱門的常用 API 大全分享API
- 常用的熱門 API 大全分享API
- 免費常用的API介面大全API
- .Net Standard HttpClient封裝Htt請求常用操作整理HTTPclient封裝
- redis 常用api操作RedisAPI
- axios封裝apiiOS封裝API
- 網路封裝APi封裝API
- JDBC常用方法封裝JDBC封裝
- JavaScript 和 CSS 常用工具方法封裝JavaScriptCSS封裝
- 嘔心整理的常用熱門API大全API
- 常用API大全分享!趕緊收藏起來!API
- 為何要再封裝 AJAX?封裝
- JavaScript操作DOM常用的APIJavaScriptAPI
- taro 介面封裝和呼叫 以豆瓣api為例封裝API
- 對api請求封裝的探索和總結API封裝
- Fetch API 簡單封裝API封裝
- CSS 和 JavaScript 常用工具方法封裝教程!CSSJavaScript封裝
- 前端常用函式封裝前端函式封裝
- 封裝操作cookie的方法封裝Cookie
- Skyline基本操作模式封裝模式封裝
- vue中Axios的封裝和API介面的管理(更新)VueiOS封裝API
- 必應每日桌布API封裝API封裝
- 熱門的免費可用的常用 API 大全整理API
- 免費常用API大全,程式設計師必備API程式設計師
- web前端常用的封裝方法Web前端封裝
- Java 位元組的常用封裝Java封裝
- 十大 API 平臺網站分享(包括常用的API 大全整理)API網站
- c# Lambda操作類封裝C#封裝
- 作業系統封裝操作作業系統封裝
- HDFS 05 - HDFS 常用的 Java API 操作JavaAPI
- jackson學習之三:常用API操作API
- 小程式API進行promise封裝APIPromise封裝
- JS盒子模型、圖片懶載入、DOM庫封裝 — 1、JS盒子模型及常用操作樣式方法的封裝...JS模型封裝
- nodejs + express + mssql 封裝資料操作NodeJSExpressSQL封裝
- 靜態PDO基礎操作封裝封裝
- OpenResty Redis操作二次封裝RESTRedis封裝
- 【程式設計師乾貨】常用的免費API介面大全程式設計師API
- Flutter學習指南:封裝 API 外掛Flutter封裝API