【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

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

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

相關文章

BigDecimal類整除報錯的解決方案

例如&#xff1a; BigDecimal num1 new BigDecimal("10"); BigDecimal num2 new BigDecimal("3"); BigDecimal num3 num1.divide(num2); 其實devide的函數定義如下 BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;…

NodeJS中的require和import

ES6標準發布后&#xff0c;module成為標準&#xff0c;標準的使用是以export指令導出接口&#xff0c;以import引入模塊&#xff0c;但是在我們一貫的node模塊中&#xff0c;我們采用的是CommonJS規范&#xff0c;使用require引入模塊&#xff0c;使用module.exports導出接口。…

【selenium】selenium和requests登陸的區別

requests登陸 import requests import time t int(time.time()*1000) # 創建一個會話 s requests.Session() post_url http://account.chinaunix.net/login/login data {username: xxxxxxxxx,password: xxxxxxxxx,_token: nmSXhgHib8dTIC9DrATSkTzBBo4zz9eqDEPeG5i1,_t: t…

【spider】多線程爬蟲

多線程工作原理 多線程示意圖 Queue&#xff08;隊列對象&#xff09; queue是python中的標準庫&#xff0c;可以直接from queue import Queue引用;隊列是線程間最常用的交換數據的形式 python下多線程的思考 對于資源&#xff0c;加鎖是個重要的環節。Queue&#xff0c;是線…

css設置文字上下居中,一行文字居中,兩行或多行文字同樣居中。

HTML: <div class"book-detail-store-item align-center-vertical">居中文字</div> CSS: .book-detail-store-item {width: 50px&#xff1b;height&#xff1a;50px&#xff1b;line-height: 25px;font-size: 12px;}/*flex垂直居中對齊*/ .align-center…

MySQL/sqlserver查詢in操作 查詢結果按in集合順序顯示

2019獨角獸企業重金招聘Python工程師標準>>> MySQL/sqlserver查詢in操作 查詢結果按in集合順序顯示 MySQL用下面的語句 select * from ibs6_terminal_adv_inf where id in (16,14,15) order by field(id,16,14,15) select * from ibs6_terminal_adv_inf where id in…

【機器學習】opencv-人臉識別

一 . opencv是什么及其作用&#xff1f; OpenCV是一個基于BSD許可&#xff08;開源&#xff09;發行的跨平臺計算機視覺庫&#xff0c;可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C 類構成&#xff0c;同時提供了Python…

關于java中的集合如何刪除一個元素。

我們有三種方法可以刪除集合中的元素&#xff0c;下面介紹兩種方法&#xff0c; 一種是傳統的for循環&#xff0c;另一種是使用Iterator迭代器(推薦使用)&#xff0c;簡單的介紹如下&#xff1a; for循環刪除元素: public class ForRemove<T>{ public void forDelete(…

她說程序員不懂浪漫,生日宴上慘變單身狗,其實,程序員的浪漫你不懂!

css蛋糕誰說程序員不懂得浪漫&#xff0c;只是程序員的浪漫你不懂&#xff01;PS&#xff1a;人家都不懂&#xff0c;你再浪漫有啥用&#xff0c;最后還不是單身狗&#xff1f;說實在的&#xff0c;以前也分享過一個程序員用純CSS畫的一個MAC&#xff0c;代碼就三千多行&#x…

H.264 picture parameter sets成員值含義學習筆記

-picture parameter sets1. pic_parameter_set_idpic_parameter_set_id指明了在切片頭中對應的某個psp.pic_parameter_set_id的值應該在0到255,包括0和2552. seq_parameter_set_idset_parameter_set_id表示激活的sps.seq_parameter_set_id應該取值在0到31之間,包括邊界值.3. en…

【機器學習】opencv-數據預處理

想要將收集好的數據s進行統一命名 數量整理 就需要提前進行預處理 import numpy as npimport osimport randomimport cv2 # wuao文件名修改&#xff0c;1~10文件名 filename os.listdir(./faces/wuao/) for i,name in enumerate(filename):os.rename(./faces/wuao/%s%(name)…

WIN7如何替換開機登錄畫面

1 把你的圖片保存為backgroundDefault.jpg,并確保和你的屏幕分辨率相同 2 把下面的代碼另存為開啟自定義登錄界面.reg&#xff08;注意格式為ASCII格式&#xff09; Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\A…

Resharper 安裝以及破解

首先進行軟件安裝 安裝后 解壓下載好的 文件 會得到如下&#xff1a; 打開序列號 會看到 然后 復制 %LocalAppData%\\JetBrains 路徑 會得到進入當前JetBrains 文件夾 然后搜索 JetBrains.Platform.Shell.dll 會得到這個文件 點擊屬性 查看到后半段的地址 \AppData\Local\JetB…

【機器學習】圖片中的人臉識別

通過opencv三方庫進行圖片人臉識別 face_zones中的參數可以自行調試,這三個data都可以用于人臉識別 haarcascade_frontalface_default.xmlhaarcascade_frontalface_alt.xmlhaarcascade_frontalface_alt2.xml import numpy as npimport cv2img cv2.imread(./2ren.jpg) img.s…

Android Fragment

Fragment在3.0后增加&#xff1a;android.app.Fragment。在v4的兼容包里也有。 一般為了兼容性還是可能會用&#xff1a;android.support.v4.app.Fragment 生命周期&#xff1a; onAttach,onCreate,onCreateView,onActivityCreated,onStart,onResume, onPause,onStop,onDestroy…

1020. 月餅 (25)

1020. 月餅 (25) 月餅是中國人在中秋佳節時吃的一種傳統食品&#xff0c;不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量&#xff0c;請你計算可以獲得的最大收益是多少。 注意&#xff1a;銷售時允許取出一部分庫存。樣例給出的情形…

【機器學習】opencv-視頻中的人臉檢測

本次在圖片識別的程度上增添了視頻識別 原理就是在圖片的基礎上進行操作 每毫秒進行下一幀的人臉解析識別&#xff0c;時間可自行設置 import numpy as np import cv2win cv2.namedWindow(dzd,cv2.WINDOW_NORMAL) cv2.resizeWindow(dzd,640,200) rose cv2.imread(./rose.jp…

scan8[16+2*4]的內容

scan8確實不好理解&#xff0c;解答如下&#xff1a; static const int x264_scan8[162*4] { /* Luma */ 41*8, 51*8, 42*8, 52*8, 61*8, 71*8, 62*8, 72*8, 43*8, 53*8, 44*8, 54*8, 63*8, 73*8, 64*8, 74*8, /* Cb */ 11*8, 21*8, 12*8, 22*8, /…

React 產品實現 -任務管理工具“氫”

原文地址&#xff1a;https://zhuanlan.zhihu.com/p/...&#xff0c;歡迎轉載 &#xff1a;-&#xff09;? 關于 其實對于這個專欄的訂閱用戶感到非常抱歉&#xff0c;已經停更很久了&#xff0c;也沒啥特別的理由就是懶 orz&#xff01;不對&#xff0c;畫風不能這樣開頭&…

通過curl獲取網頁訪問時間

curl -w %{time_namelookup}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download}"\n" "https://www.google.com" 轉載于:https://www.cnblogs.com/fanxuanhui-linux/p/6581292.html