日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【Python + Selenium】之JS定位总结

發布時間:2023/12/20 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python + Selenium】之JS定位总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、滾動條

driver.set_window_size(500,500) js = "window.scrollTo(0,200)" #左:距左邊橫滾、右:距上邊豎滾 driver.execute_script(js)

2、獲取元素的值

button = driver.find_element_by_css_selector("#su") #定位按鈕 input = driver.find_element_by_css_selector("#kw") #定位輸入框 #return:返回值 arguments[1]對應的是第二個參數,可以理解為python里的%s傳參,與之類似 js = "return arguments[1].value;" #獲取第二個屬性【button】的值 val = driver.execute_script(js,input,button) print(val)#返回結果:百度一下

3、頁面加彈出窗口提示

driver.execute_script("alert('hello world!')")

擴展alert:

#接受提示信息 from selenium.webdriver.common.alert import Alert driver.switch_to_alert().accept() t=driver.switch_to_alert() print (t.text) t.accept() #針對js 非div 元素的 alert 彈出事件 可以用: from selenium.webdriver import ActionChainsalert = driver.switch_to_alert() #模擬鍵盤Enter 鍵 ActionChains(driver).send_keys(Keys.ENTER).perform()

4、選擇日期控件

參考自制一個日期控件:《帶時間的日歷控件》

js="$('#SystemDate').val('2017-07-21');" driver.execute_script(js)

但是還有一種情況,日期控件有readonly屬性:

參考文章:《selenium+Python(Js處理日歷控件)》

datePlugin.js

index.html

<!DOCTYPE html> <html><head><title>時間控件</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script src="./js/src/datePlugin.js"></script></head><body><input onclick="SelectDate(this,'yyyy-MM-dd hh:mm:ss')" readonly="true" type="text" id="date"></body> </html>

?

?

?

#js去掉readonly屬性 js01 = "document.getElementById('date').removeAttribute('readonly');" driver.execute_script(js01)#再輸入值 js02 = "document.getElementById('date').value='2018-09-13';" driver.execute_script(js02)

?5、js對下拉框隱藏屬性的選擇

參考文章:《Selenium操作隱藏的元素》、《python+selenium select下拉選擇框定位處理》

Select.html

<!DOCTYPE html> <html><head><title>隱藏元素定位</title></head><body><div id="div01"><div id="div01_01"><div id="div01_01_01"><select name="sel01" style="display: none;"><option value="aa">AA</option><option value="bb">BB</option><option value="cc">CC</option><option value="dd">DD</option></select></div></div></div><div id="div02" class="select_cls02"><div id="div02_01"><div id="div01_02_01"><select name="sel02" style="display: none;"><option value="ee">EE</option><option value="ff">FF</option><option value="gg">GG</option><option value="hh">HH</option></select></div></div> </div></body> </html>

代碼如下:

#把隱藏的屬性改為可見,引號一定要加上,'block' js = "document.querySelectorAll('select')[1].style.display='block';" driver.execute_script(js)#定位有以下幾種 ①# sel = driver.find_element(By.CSS_SELECTOR,"div#div02 div#div02_01 div select") ②# sel = driver.find_element(By.CSS_SELECTOR,"div#div02 > div#div02_01 > div > select") ③# sel = driver.find_element(By.CSS_SELECTOR,"#div02 div div select") ④#div:nth-child(1)意思為div標簽下還有一個子div,相當于#div02 div(父) div(子) select sel = driver.find_element(By.CSS_SELECTOR,"#div02 div:nth-child(1) select") ⑤#*[name=sel02]或[name=sel02]或select[name=sel02] sel = driver.find_element(By.CSS_SELECTOR,"*[name=sel02]") ⑥# sel = driver.find_element(By.XPATH,"//div[@id='div02']/div/div/select") ⑦# sel = driver.find_element(By.XPATH,"//*[@id='div02']/div/div/select") ⑧#引號一定加上,@id='div02' and @class='select_cls02' sel = driver.find_element(By.XPATH,"//div[@id='div02' and @class='select_cls02']/div/div/select")#下拉框選擇值 Select(sel).select_by_value('hh')

6、js選擇復選框或取消、全選

html代碼:

參考:《html復選框的全選和全不選》

?View Code

Python代碼:

driver = webdriver.Chrome() driver.maximize_window() driver.get("file:///Users/xxx/Desktop/JavaScript/checkbox.html")#通過執行js,選中復選框 driver.execute_script('var chk =document.getElementById("checkAll"); chk.checked="checked"') print (driver.find_element_by_id("checkAll").is_selected()) sleep(3) #通過執行js,取消選中復選框 driver.execute_script('var chk =document.getElementById("checkAll"); chk.checked=""') print (driver.find_element_by_id("checkAll").is_selected()) sleep(3) #通過執行js,全選所有復選框,執行的js可以定義函數,通過調用函數全選 driver.execute_script('var checkboxs=document.getElementsByTagName("input");\ for (var i=0;i<checkboxs.length;i++) \ { var e=checkboxs[i];\ if(e.type=="checkbox")\ {e.checked="checked"; \ } \ };') sleep(3)

復選框定位還可以參考:《Selenium2+python自動化65-js定位幾種方法總結【轉載】》

# 勾選記住密碼 js4 = 'document.getElementsByName("remember_me")[0].click();' driver.execute_script(js4)

?

7、針對display='none',但是標簽中沒有id屬性

代碼如下:

js = "document.querySelector('#xtgl > div > span').style.display='block';" driver.execute_script(js) text = driver.find_element(By.CSS_SELECTOR,"#xtgl > div > span").text

總結

以上是生活随笔為你收集整理的【Python + Selenium】之JS定位总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。