发送JS
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
# 执行js指令。
js_code = 'return document'
driver.execute_script(js_code)
# 有哪一些指令在 selenium 当中不存在的
# 1、
el = driver.find_element()
el.get_attribute('href')
el.set_attribute()
================================================
js 的简单使用
DOM 对象的document 是最重要的,
- el = document.getElementById
- el.value = ‘’
注意:js修改代码仅此一次生效,下次访问需要重新修改。
document.getElementById('email') # 通过 document.getElementById 查询("元素")
# 显示的结果:
<input id="email" class="atsx-input atsx-input-lg" autocomplete="off" data-test="inputForEmail" placeholder="邮箱" type="text" data-__meta="[object Object]" data-__field="[object Object]" value=""
el = document.getElementById('email') # 给 赋值 el = document.getElementById 查询("元素")
# 显示的结果:
<input id="email" class="atsx-input atsx-input-lg" autocomplete="off" data-test="inputForEmail" placeholder="邮箱" type="text" data-__meta="[object Object]" data-__field="[object Object]" value=""
el.id="haha" # 修改为 el.id="haha"
# 显示结果为:
"haha"
el # 打印 el
# 显示的结果: 此时 id 已经改为 "haha"
<input id="haha" class="atsx-input atsx-input-lg" autocomplete="off" data-test="inputForEmail" placeholder="邮箱" type="text" data-__meta="[object Object]" data-__field="[object Object]" value="">
============================================================
用python的方式编写JS
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get('https://www.12306.cn/index/')
# 第一种方法:
# 执行 js 语句写上日期
time.sleep(5)
js_code = "let input = document.getElementById('train_date');input.readOnly = false;input.value = '2021-03-11';"
driver.execute_script(js_code)
time.sleep(5)
# 第二种方法:
# 可以把 python 和 js 混用
# input_elem = driver.find_element('id', 'train_date')
# time.sleep(2)
# 准备 js 代码
# js_code = "arguments[0].readOnly = false; arguments[0].value = '2021-03-22';"
# driver.execute_script(js_code, input_elem)
# time.sleep(3)
=============================================================================
窗口滚动
scrollTo : 滚动到 500px
案例1:window.scrollBy(0,500)
滑动到最底下,案例2:window.scrollBy(0,document.body.scrollHeight)
scrollBy: 滚动 100px
将元素滚动到可视范围之内
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get('https://www.12306.cn/index/')
# 找到需要定位的元素
el = driver.find_element('xpath', "//h2[contains(text(),'中国铁路官方微信')]")
# 讲元素滚动到可视范围之内
el.location_once_scrolled_into_view
time.sleep(3)
===================================================================
文件上传
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get('file:///D:/classes/web_auto_testing/lesson6/d1.html')
# 文件上传
# input 可以直接通过 send_keys 发送文件路径
f = driver.find_element('id', 'mfile')
f.send_keys(r'D:\classes\web_auto_testing\lesson6\总结')
time.sleep(2)
===============================================================
文件上传:
1、 send_keys : 一定要是 input 元素
2、 现在文件上传的元素不是 input , div
——— 只能借助第三方工具, 上传文件时,打开的窗口
安装:
pip install pywinauto
from pywinauto.keyboard import send_keys
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('file:///D:/classes/web_auto_testing/lesson7/code/d1.html')
# 文件上传
# input 可以直接通过 send_keys 发送文件路径
f = driver.find_element('id', 'mfile')
time.sleep(2)
# 触发点击事件,让系统的弹框出来
f.click()
# 等待,因为弹框弹出来需要时间
time.sleep(1)
# pywinauto 的 send_key
send_keys(r'C:\Users\muji\Desktop\qrcode.bmp')
# 确认提交,确定
send_keys('{VK_RETURN}')
# pyautogui
# pyautogui.write('d:\cases.xlsx')
# pyautogui.press('enter', 2)
time.sleep(3)