selenium键盘操作,执行JS,上传文件
Posted 呓语落花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium键盘操作,执行JS,上传文件相关的知识,希望对你有一定的参考价值。
键盘操作
导包
from selenium.webdriver.common.keys import Keys
对应属性以及调用
Keys.BACK_SPACE:回退键(BackSpace)
Keys.TAB:制表键(Tab)
Keys.ENTER:回车键(Enter)
Keys.SHIFT:大小写转换键(Shift)
Keys.CONTROL:Control键(Ctrl)
Keys.ALT:ALT键(Alt)
Keys.ESCAPE:返回键(Esc)
Keys.SPACE:空格键(Space)
Keys.PAGE_UP:翻页键上(Page Up)
Keys.PAGE_DOWN:翻页键下(Page Down)
Keys.END:行尾键(End)
Keys.HOME:行首键(Home)
Keys.LEFT:方向键左(Left)
Keys.UP:方向键上(Up)
Keys.RIGHT:方向键右(Right)
Keys.DOWN:方向键下(Down)
Keys.INSERT:插入键(Insert)
DELETE:删除键(Delete)
NUMPAD0 ~ NUMPAD9:数字键1-9
F1 ~ F12:F1 - F12键
(Keys.CONTROL, ‘a’):组合键Control+a,全选
(Keys.CONTROL, ‘c’):组合键Control+c,复制
(Keys.CONTROL, ‘x’):组合键Control+x,剪切
(Keys.CONTROL, ‘v’):组合键Control+v,粘贴
实例操作
import time
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(‘https://www.baidu.com‘)
input_ele = driver.find_element_by_id(‘kw‘)
# 输入柠檬班
input_ele.send_keys(‘addicated‘)
# 输入回车键
input_ele.send_keys(Keys.ENTER)
#按F12
input_ele.send_keys(Keys.F12)
#全选
input_ele.send_keys(Keys.CONTROL, ‘a‘)
# 复制
input_ele.send_keys(Keys.CONTROL, ‘c‘)
# 粘贴
input_ele.send_keys(Keys.CONTROL, ‘v‘)
input_ele.send_keys(Keys.CONTROL, ‘v‘)
执行JS代码
selenium内置了执行js代码的api。
在web自动化中主要使用js来进行2个方面的操作
1,通过js代码修改元素的属性,例如一些只读的input框之类
# ----------------------------通过js代码修改元素的属性--------------------
from_ele = driver.find_element_by_id("fromStationText")
to_ele = driver.find_element_by_id(‘toStationText‘)
time.sleep(3)
# js代码
js =
"""
var fro_ele = arguments[0];
var to_ele = arguments[1];
fro_ele.value = ‘上海‘;
to_ele.value = ‘太原‘;
return ‘操作完了‘;
"""
# js 内为js代码块,进行变量属性复制,arguments是形参,在调用的时候顺序传参进去
# 执行js代码
res = driver.execute_script(js,from_ele,to_ele)
print(‘js代码执行之后的返回值:‘,res)
2,通过js来定位元素,例如一些定位困难的元素
# -----------------------通过js来定位元素-------------------------------------
js = """
var forEle = document.getElementById(‘fromStationText‘);
return forEle;
"""
res = driver.execute_script(js)
time.sleep(3)
res.send_keys(‘长沙‘)
print(res)
理解arguments
# -----------------------理解arguments---------------------------
arguments:execute_script方法中传进入的参数,除了js代码,都会保存在arguments中
js = """
console.log(arguments)
"""
driver.execute_script(js,9999,111,222,333,44,555)
通过执行JS完成的操作
sendKeys
driver.get(‘https://www.baidu.com‘)
input_ele = driver.find_element_by_id(‘kw‘)
# js代码
js = "document.getElementById(‘kw‘).value = ‘addicated‘"
# 执行js代码
driver.execute_script(js)
修改元素属性,如只读
driver.get(‘https://www.12306.cn/index/‘)
date_ele = driver.find_element_by_id("train_date")
time.sleep(3)
# js代码
js = """
var date_ele = arguments[0];
date_ele.readOnly=false;
date_ele.value =‘2020-06-09‘;
"""
# 执行js代码
driver.execute_script(js, date_ele)
js代码操作,滑动页面
driver = webdriver.Chrome()
driver.get(‘https://www.xfz.cn‘)
date_ele = driver.find_element_by_xpath(‘//div[@class="more-news"]‘)
# 滑动窗口到元素可见位置,返回当前元素在页面的坐标位置
res = date_ele.location_once_scrolled_into_view
print(res)
window.scrollTo:滑动到相对于坐标原点的位置
window.scrollBy:相对于当前位置进行滑动
document.body.scrollHeight:获取当前窗口的可滑动的最大高度
js代码打开新窗口
js = "window.open(‘https://www.baidu.com‘)"
driver.execute_script(js)
上传文件操作
上传文件
一种是通过js上传,
一种是input框
指的是页面上的上传文件入口api,input框类型,以及,点击按钮出发绑定的js代码进行文件上传的两种方式。
input上传
driver.find_element_by_xpath(‘//div[button[@id="test1"]]/input‘)
.send_keys(‘C:课件images9.png‘)
简单粗暴的sendkeys即可。
JS上传
1,pywinauto
缺点 : 只能在windows上使用
优点:可以选择多个文件,路径中允许中文
实例:
# ------------pywinauto 通过窗口上传单个文件----------------------
from pywinauto.keyboard import send_keys
#定位文件上传按钮:
driver.find_element_by_id(‘test1‘).click()
time.sleep(2)
# 输入文件名
send_keys(‘C:课件images9.png‘)
# 输入回车键
send_keys(‘{VK_RETURN}‘)
# -----------------上传多个文件时
time.sleep(2)
# 输入文件名
send_keys(‘"C:课件images9.png"‘)
send_keys(‘"C:课件images8.png"‘)
send_keys(‘"C:课件images9.png"‘)
# 输入回车键
send_keys(‘{VK_RETURN}‘)
2,pyaugoui
缺点:只能选择一个文件,文件路径不允许中文
优点:跨平台,linux,max,windows都可以受用
实例:
import pyautogui
driver.find_element_by_id(‘test1‘).click()
time.sleep(2)
pyautogui.write(‘C:projectpy27_classpy27_webgoogle.png‘)
pyautogui.press(‘enter‘, 2)
以上是关于selenium键盘操作,执行JS,上传文件的主要内容,如果未能解决你的问题,请参考以下文章