letheashura 2020-06-26
导包
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‘)
selenium内置了执行js代码的api。
在web自动化中主要使用js来进行2个方面的操作
# ----------------------------通过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)
# -----------------------通过js来定位元素------------------------------------- js = """ var forEle = document.getElementById(‘fromStationText‘); return forEle; """ res = driver.execute_script(js) time.sleep(3) res.send_keys(‘长沙‘) print(res)
# -----------------------理解arguments--------------------------- arguments:execute_script方法中传进入的参数,除了js代码,都会保存在arguments中 js = """ console.log(arguments) """ driver.execute_script(js,9999,111,222,333,44,555)
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)
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 = "window.open(‘https://www.baidu.com‘)" driver.execute_script(js)
上传文件
一种是通过js上传,
一种是input框
指的是页面上的上传文件入口api,input框类型,以及,点击按钮出发绑定的js代码进行文件上传的两种方式。
driver.find_element_by_xpath(‘//div[button[@id="test1"]]/input‘) .send_keys(‘C:\课件\images\9.png‘)
简单粗暴的sendkeys即可。
缺点 : 只能在windows上使用
优点:可以选择多个文件,路径中允许中文
实例:
# ------------pywinauto 通过窗口上传单个文件---------------------- from pywinauto.keyboard import send_keys #定位文件上传按钮: driver.find_element_by_id(‘test1‘).click() time.sleep(2) # 输入文件名 send_keys(‘C:\课件\images\9.png‘) # 输入回车键 send_keys(‘{VK_RETURN}‘) # -----------------上传多个文件时 time.sleep(2) # 输入文件名 send_keys(‘"C:\课件\images\9.png"‘) send_keys(‘"C:\课件\images\8.png"‘) send_keys(‘"C:\课件\images\9.png"‘) # 输入回车键 send_keys(‘{VK_RETURN}‘)
缺点:只能选择一个文件,文件路径不允许中文
优点:跨平台,linux,max,windows都可以受用
实例:
import pyautogui driver.find_element_by_id(‘test1‘).click() time.sleep(2) pyautogui.write(‘C:\project\py27_class\py27_web\google.png‘) pyautogui.press(‘enter‘, 2)