一、日期控件
只读控件的日期控件,如何实现输入?
javascript 实现 调用execute_script
"""
js操作
execute_script
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver=webdriver.Chrome()
driver.get("https://www.12306.cn/index/")
time.sleep(2)
# 只读日期控件元素
el_data=driver.find_element(By.ID,"train_date")
# 去掉readonly属性‐‐‐》通过js操作元素driver.execute_script()
# arguments 把execute_script后面的第二个或者第三个或者到第n个参数到放在arguments
js="var el=arguments[0];el.removeAttribute('readonly');"
# 执行js脚本,去掉readonly属性
driver.execute_script(js,el_data)
# 清除日期控件默认值
el_data.clear()
time.sleep(2)
# # 日期控件输入设置的日期
el_data.send_keys('2021‐10‐01')
print("时间控件设置的日期:",el_data.get_attribute("value"))
二、滚动条操作
什么情况下,需要把元素放到可见区域我才可以操作呢?
懒加载/慢加载 必须把元素移动可见区域,才会实现加载 ——》滚动条操作
execute_script
"""
滚动条操作
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element(By.ID,"kw").send_keys("selenium webdriver")
driver.find_element(By.ID,"su").click()
loc=(By.XPATH,"//div[@id='7']/h3/a")
# 显示等待 presence_of_element_located不一定元素可见,只要存在即可
WebDriverWait(driver,15).until(EC.presence_of_element_located(loc))
el2=driver.find_element(*loc)
time.sleep(2)
# el2.click()
# 实现滚动条从顶部到底部
driver.execute_script("scrollTo(0,document.body.scrollHeight)")
time.sleep(2)
# 实现滚动条从浏览器底部到顶部
driver.execute_script("scrollTo(document.body.scrollHeight,0)")
time.sleep(2)
# 操作哪个元素,滚动条移动到元素附近(元素与页面的顶部对齐,元素与页面的底部对齐)
js2="arguments[0].scrollIntoView(false);"
driver.execute_script(js2,el2)
time.sleep(2)
三、文件上传
"""
文件上传操作
类型一:支持直接输入
类型二:不可以直接输入,只能选择
"""
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
# 类型一:支持直接输入
driver=webdriver.Chrome()
driver.get(r"E:\VIP\M211\web\WebCode\class06\test.html")
time.sleep(4)
el_file=driver.find_element(By.ID,"f1")
el_file.send_keys(r"E:\VIP\M211\web\WebCode\class06\test.html")
time.sleep(2)
driver.close()
# 类型二:不可以直接输入,只能选择
# 如何定位windows窗口及窗口的元素?
# 环境准备
# 1、定位工具(识别window窗口及元素)‐‐‐winSpy
# 2、第三方库 pywin32
# 安装: pip install pywin32
# 切换源 pip install ‐i https://pypi.douban.com/simple pywin32 --trust-host pypi.douban.com
# 如何定位windows窗口及窗口的元素?
#文件上传输入框: #32770‐ComboBoxEx32‐ComboBox‐Edit
# 打开按钮:#32770‐Button
import win32gui
import win32con
driver=webdriver.Chrome()
driver.get(r"E:\VIP\M211\web\WebCode\class06\test.html")
time.sleep(4)
el_file=driver.find_element(By.ID,"f1")
ActionChains(driver).move_to_element(el_file).click().perform()
def upload(filePath,browser_type="Chrome"):
if browser_type == "Chrome":
title = "打开"
else:
title = "文件上传"
#32770‐ComboBoxEx32 ‐ComboBox ‐Edit
dialog = win32gui.FindWindow("#32770",title) #一级窗口 ‘打开窗口’
ComboBoxEx32 = win32gui.FindWindowEx(dialog,0,"ComboBoxEx32",None) #二级
ComboBox = win32gui.FindWindowEx(ComboBoxEx32,0,"ComboBox",None) #三级
edit = win32gui.FindWindowEx(ComboBox,0,"Edit",None) #四级
# 32770‐Button
button = win32gui.FindWindowEx(dialog,0,"Button",None) #四级
# 往文件名编辑框中输入文件路径
# 上传操作
win32gui.SendMessage(edit,win32con.WM_SETTEXT,None,filePath)
win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button) #点击打开按钮
filepath=r"E:\VIP\M211\web\WebCode\class06\test.html"
time.sleep(5)
upload(filePath=filepath)
print("文件上传成功")
time.sleep(10)
作业:
熟练对于时间控件、滚动条、及文件上传元素的操作