【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.mzph.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) ;…

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

关于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…

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…

React 产品实现 -任务管理工具“氢”

原文地址&#xff1a;https://zhuanlan.zhihu.com/p/...&#xff0c;欢迎转载 &#xff1a;-&#xff09;? 关于 其实对于这个专栏的订阅用户感到非常抱歉&#xff0c;已经停更很久了&#xff0c;也没啥特别的理由就是懒 orz&#xff01;不对&#xff0c;画风不能这样开头&…

【R】语言第一课-----安装

安装R和Rstuido软件 R语言是用于统计分析&#xff0c;图形表示和报告的编程语言和软件环境&#xff1b;Rstudio是编辑、运行R语言的最为理想的工具之一。 1、官网下载R安装包 下载地址为&#xff1a;https://cran.r-project.org 进入链接&#xff0c;如下图所示&#xff0c…

谁说菜鸟不会数据分析--读书笔记

如果看不清可以下载下来&#xff0c;打开&#xff0c;放大。仅供参考。 转载于:https://www.cnblogs.com/sunshinewang/p/6591772.html

Thinkphp5 还有这种操作?

2019独角兽企业重金招聘Python工程师标准>>> 在 _initialize 中取出 控制器名和方法名 define(CONTROLLER_NAME,Request::instance()->controller()); define(MODULE_NAME,Request::instance()->module()); define(ACTION_NAME,Request::instance()->actio…

【R】语言第五课----画图

?plot#高级绘图函数 可以完整地绘制出一张图 ?mtcars plot(mtcars$wt) plot(mtcars[,1:2]) plot(mtcars) plot(mtcars$wt,mtcars$disp) plot(mtcars$wt,mtcars$disp,typep) plot(mtcars$wt,mtcars$disp,typel) plot(mtcars$wt,mtcars$disp,typeb) plot(mtcars$wt,mtcars$disp…

Solidworks如何将参考平面的图形投影到某曲面上

1 画好草图&#xff0c;点击曲线-分割线 2 选择要投影的草图和被投影的面&#xff08;那个球面&#xff09;&#xff0c;最后效果如下图所示 3 为了获取连续的轨迹&#xff0c;我们可以再次选择这个草图&#xff0c;然后在投影面中选择平面&#xff0c;最后得到的图形如下图所示…

Series和DataFrame、相关性及NaN处理

pandas核心数据结构 pandas是以numpy为基础的&#xff0c;还提供了一些额外的方法 Series series用来表示一维数据结构&#xff0c;与python内部的数组类似&#xff0c;但多了一些额外的功能。 series内部由两个相互关联的数组组成&#xff1a;主数组用来存放数组&#xff…

pandas读写各种类型数据

read_X()通常是pandas模块下的&#xff0c;to_X()是dataframe的方法 CSV 读取 使用pandas.read_csv()方法&#xff0c;返回的是一个dataframe csv默认是以"&#xff0c;"分割的 csv文件内容 1、read_csv()默认以第一行数据作为标题 2、调用dataframe的head()方法…

python 类装饰器

1 装饰器无参数 class tracer: def __init__(self,func): self.calls 0 self.func func def __call__(self,*args): self.calls 1 print(call %s to %s %(self.calls, self.func.__name__)) self.func(*args) tracer def spam(a, b, c): print(a b c) …

【数据分析】使用pandas和numpy分析美国大选献金项目

1. 数据载入与总览 1.1 数据加载 #绘图工具 import matplotlib.pyplot as plt %matplotlib inline #数据处理工具 import numpy as np import pandas as pd from pandas import Series,DataFrame#数据路径自己指定&#xff0c;本案例数据路径就在当前文件夹下面子文件夹usa_e…

《容器技术系列》一1.4 Docker运行案例分析

本节书摘来华章计算机《容器技术系列》一书中的第1章 &#xff0c;第1.4节&#xff0c;孙宏亮 著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.4 Docker运行案例分析 1.3节着重介绍了Docker架构中各个模块的功能&#xff0c;学完后我们可以对Docker的架构有一…

3月22日AM

看了思维章节精讲视频课&#xff0c;并且总结了部分思维章节内容转载于:https://www.cnblogs.com/bgd140206102/p/6601440.html