一、日期控件
只读控件的日期控件,如何实现输入?
javascript 实现 调用execute_script
"""js操作execute_script"""import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysdriver=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个参数到放在argumentsjs="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 timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver=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 timefrom selenium import webdriverfrom selenium.webdriver import ActionChainsfrom 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‐Buttonimport win32guiimport win32condriver=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 ‐Editdialog = 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‐Buttonbutton = 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)
作业:
熟练对于时间控件、滚动条、及文件上传元素的操作
