小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python UI自動(dòng)化-Selenium【JS操作】_seleniumjs點(diǎn)擊

 福兮007 2023-08-23 發(fā)布于上海

前言

在selenium定位元素操作中,如果有些元素定位不到,或者頁(yè)面元素的屬性有需要修改,可以通過(guò)js操作來(lái)對(duì)html頁(yè)面元素獲取、元素屬性獲取、元素的屬性進(jìn)行修改


一、JS執(zhí)行方式

selenium當(dāng)中執(zhí)行js代碼有兩種方式:
1、driver.execute_script(js代碼(語(yǔ)句用;隔開(kāi)),傳入js代碼當(dāng)中的值)

#頁(yè)面滾動(dòng)到可滑動(dòng)最大高度
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

2、使用selenium找到的元素對(duì)象,可以傳遞給js代碼
js - argument 對(duì)象:js代碼中使用arguments來(lái)接收參數(shù),可以理解是個(gè)列表,通過(guò)下標(biāo)取值,從0開(kāi)始,根據(jù)參數(shù)的位置

#js代碼中使用arguments來(lái)接收參數(shù),可以理解是個(gè)列表,通過(guò)下標(biāo)取值,從0開(kāi)始,根據(jù)參數(shù)的位置
ele_input = driver.find_element(By.ID,"kw")
ele_button = driver.find_element(By.ID,"su")

js_code = 'arguments[0].value="";'           'arguments[1].click()'
driver.execute_script(js_code,ele_input,ele_button)

二、常用方法舉例

1、js操作滾動(dòng)條

  1. 設(shè)置滾動(dòng)條位置,距離頂部xxx像素
driver.execute_script("document.documenElement.scrollTop=xx")
  1. 滑動(dòng)到指定坐標(biāo)位置
  • 1、X軸:網(wǎng)頁(yè)左上角,從左到右越來(lái)越大
  • 2、Y軸:網(wǎng)頁(yè)左上角,從上到下越來(lái)越大
#滑動(dòng)到頁(yè)面頂部
driver.execute_script("window.scrollTo(0,0)")
  1. 基于當(dāng)前位置滑動(dòng)指定像素距離
driver.execute_script("window.scrollBy(0,0)")
  1. 獲取滾動(dòng)條可滑動(dòng)最大寬度
driver.execute_script("document.body.scrollWidth")
  1. 獲取滾動(dòng)條可滑動(dòng)最大高度
driver.execute_script("document.body.scrollHeight")
  1. 獲取當(dāng)前滾動(dòng)距離最上方的距離(垂直方向)
driver.execute_script("document.documentElement.scrollTop")
  1. 獲取當(dāng)前滾動(dòng)距離最左側(cè)的距離(水平方向)
driver.execute_script("document.documentElement.scrollLeft")

2、頁(yè)面需要手動(dòng)將元素滾到可見(jiàn)區(qū)域

兩種方式

  1. 使用webelement自帶的滾動(dòng)到可見(jiàn)區(qū)域的屬性
ele.location_once_scrolled_into_view #元素與窗口頂端對(duì)齊
  1. js的方法
    arguments[0].scrollIntoView(true) #元素與窗口頂端對(duì)齊
    arguments[0].scrollIntoView(false) #元素與窗口底端對(duì)齊
#與窗口頂端對(duì)齊,只要元素在頁(yè)面就可以用,不管元素所屬哪個(gè)滾動(dòng)條
driver.execute_script("arguments[0].scrollIntoView(true)",elem)
#與窗口底部對(duì)齊,只要元素在頁(yè)面就可以用,不管元素所屬哪個(gè)滾動(dòng)條
driver.execute_script("arguments[0].scrollIntoView(false)",elem)

參數(shù)說(shuō)明
scrollIntoView是一個(gè)與頁(yè)面(容器)滾動(dòng)相關(guān)的API
element.scrollIntoView() 參數(shù)默認(rèn)為true
參數(shù)為true:調(diào)用該函數(shù),頁(yè)面發(fā)送滾動(dòng),使element的頂部與視圖(容器)頂部對(duì)齊
參數(shù)為false:使element的底部與視圖(容器)底部對(duì)齊

3、js點(diǎn)擊

driver.execute_script("arguments[0].click();",element)

4、js修改value屬性值

driver.execute_script("arguments[0].value = arguments[1].value",ele1,value)

擴(kuò)展

如果鼠標(biāo)從頁(yè)面上某元素移開(kāi),彈出的元素內(nèi)容就整個(gè)消失了,無(wú)法查看其對(duì)應(yīng)的HTML來(lái)定位元素,可使用f12-控制臺(tái)中凍結(jié)彈窗

//表示在 5000毫秒后,執(zhí)行debugger命令。執(zhí)行該命令會(huì)瀏覽器會(huì)進(jìn)入debug狀態(tài)。
//debug狀態(tài)有個(gè)特性,界面被凍住,不管我們?cè)趺袋c(diǎn)擊界面都不會(huì)觸發(fā)事件。
setTimeout(function(){debugger},5000)

注意

接收js執(zhí)行之后的返回值,js代碼中要寫(xiě)return

driver.execute_script("return document.getElementById('Input').value")

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多