【Python + Selenium】之JS定位总结

网友投稿 1603 2022-11-21

【Python + Selenium】之JS定位总结

【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

时间控件         

#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

隐藏元素定位

代码如下:

#把隐藏的属性改为可见,引号一定要加上,'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(子) selectsel = 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复选框的全选和全不选​​》

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

# 勾选记住密码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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:FBV(function base views) 顾名思义基于函数的视图类 CBV(class base views)基于类的视图类
下一篇:【selenium】selenium和requests登陆的区别
相关文章

 发表评论

暂时没有评论,来抢沙发吧~