web 自动化之 selenium 下拉鼠标键盘文件上传
文章目录
- 一、下拉框操作
- 二、键盘操作
- 三、鼠标操作
- 四、日期控件
- 五、滚动条操作
- 六、文件上传
- 七、定位windows窗口及窗口的元素
- 总结:页面及元素常用操作
一、下拉框操作
from selenium.webdriver.support.select import Select
import time
from selenium.webdriver.common.by import By
from selenium import webdriverdriver=webdriver.Edge()
driver.get(r"E:/Notepad++/test3.html")# 定位下拉框
el1=driver.find_element(By.ID,"fangshi")
select=Select(el1)
# 展示下拉框所有选项内容显示
print("展示下拉框所有选项内容",select.options)
time.sleep(2)# 实现选择下拉框选项选择 有三种方式 索引 value 选项内容
select.select_by_index(1)
time.sleep(2)
select.select_by_value("7")
time.sleep(2)
select.select_by_visible_text("微信支付(7折)")
time.sleep(2)
driver.close()
注:E:/Notepad++/test3.html 文件内容见 Web 自动化之 HTML & JavaScript 详解 中的二、javascript 脚本代码
二、键盘操作
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keysdriver=webdriver.Edge()
driver.get("https://www.baidu.com")
driver.find_element(By.ID,"kw").send_keys("selenium")
time.sleep(2)
# ctrl+a
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'a')
# ctrl+c
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'c')
# ctrl+x
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'x')
driver.find_element(By.ID,"kw").clear()
time.sleep(2)
# ctrl+v
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'v')time.sleep(2)
driver.close()
三、鼠标操作
# 鼠标操作
"""
鼠标操作
ActionChains 动作链
可以把多个鼠标操作按照顺序连贯的统一执行:actions.perform()
"""
from selenium.webdriver import ActionChains
import time
from selenium.webdriver.common.by import By
from selenium import webdriverdriver=webdriver.Edge()
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)
el_set=driver.find_element(By.XPATH,'//*[@id="s-usersetting-top"]')
# ActionChains(driver).move_to_element(el_set).perform()
# 第二种写法
actions=ActionChains(driver)
actions.move_to_element(el_set)
actions.perform()
time.sleep(1)
el_gjselect=driver.find_element(By.LINK_TEXT,"高级搜索")
el_gjselect.click()
# 获取某个元素的坐标
print(el_gjselect.location)
time.sleep(2)
driver.close()"""
ActionChains 常用的鼠标操作方法
鼠标常用操作:
滑块操作
click_and_hold 点击鼠标左键不松开
context_click 鼠标右击
double_click 双击
drag_and_drop 从一个元素拖到鼠标到另外一个元素
drag_and_drop_by_offset 拖到某个坐标松开
move_by_offset 鼠标从当前位置移动到某个坐标
move_to_element
move_to_element_with_offset 移动到距某个元素(左上角坐标)多少距离的位置
pause 停留
release 释放鼠标
"""
四、日期控件
只读控件的日期控件,如何实现输入?
javascript 实现 调用 execute_script
"""
js操作
execute_script
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver=webdriver.Edge()
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('2025‐05‐16')
print("时间控件设置的日期:",el_data.get_attribute("value"))
time.sleep(2)
driver.close()
五、滚动条操作
什么情况下,需要把元素放到可见区域我才可以操作呢?
懒加载/慢加载 必须把元素移动可见区域,才会实现加载 ----》滚动条操作
javascript 实现 调用 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 ECdriver=webdriver.Edge()
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,'//*[@id="10"]/div/div/div/h3/a')
# 显示等待 presence_of_element_located不一定元素可见,只要存在即可
WebDriverWait(driver,15).until(EC.presence_of_element_located(loc))
el2=driver.find_element(*loc)
time.sleep(2)
# 实现滚动条从顶部到底部
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)
# 点击元素
el2.click()
time.sleep(2)
driver.close()
六、文件上传
"""
文件上传操作类型一:支持直接输入类型二:不可以直接输入,只能选择
"""
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By# # 类型一:支持直接输入
# driver = webdriver.Edge()
# driver.get(r'E:/Notepad++/test1.html')
# time.sleep(4)
# el_file=driver.find_element(By.ID,"f1")
# el_file.send_keys(r"E:/Notepad++/test1.html")
# time.sleep(2)
# driver.close()# 类型二:不可以直接输入,只能选择
# 如何定位windows窗口及窗口的元素?
# 环境准备
# 1、定位工具(失败window窗口及元素)‐‐‐winSpy
# 2、第三方库 pywin3
# 安装: pip install pywin32
# 切换源 pip install ‐i https://mirrors.aliyun.com/pypi/simple/ pywin32
# 如何定位windows窗口及窗口的元素? 具体请查看 七、定位windows窗口及窗口的元素
#文件上传输入框: #32770‐ComboBoxEx32 ‐ComboBox ‐Edit
# 打开按钮:#32770‐Buttonimport win32gui
import win32condriver=webdriver.Chrome()
driver.get(r"E:\Notepad++\test1.html")
time.sleep(4)
el_file=driver.find_element(By.ID,"f1")
ActionChains(driver).move_to_element(el_file).click().perform()
def upload(file_path):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,file_path)win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button) #点击打开按钮filepath=r"E:\Notepad++\test1.html"
time.sleep(5)
upload(file_path=filepath)
print("文件上传成功")
time.sleep(10)
driver.close()
注:E:/Notepad++/test3.html 文件内容见 Web 自动化之 HTML & JavaScript 详解 中的一、HTML 常用标签代码
七、定位windows窗口及窗口的元素
1、WinSpy17 软件下载
2、使用方法-图文详情
总结:页面及元素常用操作
四大操作
元素操作
三大等待
三大切换 句柄/frame/alert
键盘操作 keys
鼠标操作 ActionChains
JS操作 日期控件/滚动条
下拉列表
文件上传 input/非input类型文件