【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 ActionChains

alert = 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
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络毒刘

授人玫瑰,手有余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值