selenium自动化基础知识点

selenium自动化基础知识点



一、Selenium是什么?

selenium是用来进行页面元素定位的第三方库,可使用xpath,元素数据,绝对相对路径进行元素定位及鼠标点击事件等等,用来进行web自动化测试的工具,可以直接运行在浏览器中,像用户自己手动点击操作一样

二、使用步骤

1.引入库

pip install selenium # 使用pip命令下载selenium第三方库

from selenium import webdriver # 导入selenium库

2.下载对应的浏览器驱动

下载浏览器驱动时注意需要下载与浏览器对应的驱动版本,下载完成后将驱动放置python环境的安装路径下:C:\Users\Administrator\AppData\Local\Programs\Python\Python39

谷歌驱动下载地址:https://registry.npmmirror.com/binary.html?path=chromedriver/
123.0···之后谷歌驱动下载地址:https://getwebdriver.com/
火狐驱动下载地址:https://liushilive.github.io/github_selenium_drivers/md/Firefox.html

3.基本使用

from selenium import webdirver

driver = webdriver.Chrome() # 声明谷歌浏览器驱动
# 示例1:打开百度
driver.get("https://www.baidu.com")
# 示例2:获取当前窗口的title
print(dirver.title)
# 示例3:获取当前窗口的url
print(dirver.current_url)
# 示例4:最大化窗口
dirver.maximize_window()
#  示例5:刷新页面
dirver.refresh()
#  示例6:下一页,上一页
dirver.forward()  dirver.back()
# 示例7:关闭当前窗口/关闭浏览器
# 区别:当只有一个窗口时,关闭窗口,后台驱动也会关闭
dirver.close()/dirver.quit()

三、元素定位

1、特点

1、万能定位方式
2、支持文本内容进行定位
3、支持元素的多个属性进行定位
4、支持通过元素层级关系进行定位

2、八大元素定位方法

8大定位操作xmind笔记连接:[https://hnqlpvx3ef.feishu.cn/mindnotes/bmncnZMK43mqhxFhwtWXQJs62Ig]
(https://hnqlpvx3ef.feishu.cn/mindnotes/bmncnZMK43mqhxFhwtWXQJs62Ig)

 ID = "id"   # id属性
 XPATH = "xpath" # xpath定位
 LINK_TEXT = "link text" # a元素的文本内容
 PARTIAL_LINK_TEXT = "partial link text" # a元素包含的文本内容
 NAME = "name" #  name属性
 TAG_NAME = "tag name" # 标签名
 CLASS_NAME = "class name" # class属性
 CSS_SELECTOR = "css selector" # css选择器定位

3、分类及使用【xpath】:

1. 绝对路径定位

1.1、 F12中点击页面元素复制位置即可
1.2 、提现父子,兄弟关系
1.3、 过于依赖页面元素,不稳定【前端经常更改页面元素关系,绝对定位不能够稳定版本使用】

2. 相对路径定位

2.1、特点:  	
			1、不考虑位置,不考虑层级
			2、在这个html页面找,只要表达式能匹配到就可以
			3、ctrl+f校验表达式是否正确

2.2 代码示例:

一、通过元素本身属性定位:

1、标签名定位:
	语法: //标签名
	
2、标签名+单个属性
	语法://标签名[@属性名="属性值"]
	
3、标签名+文本:
	语法://标签名[text(),"文本值"]
	
4、标签名+contains()函数匹配部分属性值或文本内容定位
	语法://标签名[@属性名 或 text() = , "指定部分文本或属性值"]
	
5、标签名+多个属性组合定位,可使用逻辑语句and or not
	语法://标签名[@属性名1 = "值1" and @属性名2 = "值2"]

二、通过关系定位(父级、兄弟级):
1、层级定位(通过区域内层级关系找到元素):
	语法://标签名1[@属性名1 = "值1"]/标签名2[@属性名2 = "值1"]

2、轴定位(通过子孙元素查找父级、祖先级元素;通过兄弟元素查找指定元素):
	语法://标签名称[@属性名1 = "值1"]/轴名称::标签名称1[[@属性名2 = "值2"]
	
	//轴:在当前节点下所有子孙节点去找元素
	/轴:在当前之后的所有节点去找元素(递归所有兄弟节点)
	
	轴名称:
		ancestor:祖先节点包括父节点
		parent: 父节点
		following:当前节点【之后】的所有节点
		preceding:当前节点【之前】的所有节点
		following-sibling: 当前节点【之后】的所有兄弟节点
		preceding-sibling: 当前节点【之前】的所有兄弟节点

四、Dom元素 and 窗口操作

1.Dom元素操作:

元素状态
1、元素存在:页面存在  存在:在html当中,可以找到这个元素。 但它不一定可见。
2、元素可见:页面不可见  可见:元素在页面当中占据了一定的大小。高和宽>0
3、元素可用:按钮置灰(不可用)

元素操作链接地址:http://t.csdn.cn/Kgb0r

2.常用窗口操作:

项目Value
maximize_window()放大当前窗口,不需要传参
minimize_window()最小化特定窗口
.back()上一页
.forward()下一页
.close()关闭当前窗口
.quit()推出驱动程序并关闭所有窗口
.switch_to.(…)包含所有可切换焦点的对象,具体可切换对象如下:

element = driver.switch_to.active_element
alert = driver.switch_to.alert
driver.switch_to.default_content()
driver.switch_to.frame(‘frame_name’)
driver.switch_to.frame(1)
driver.switch_to.frame(driver.find_elements_by_tag_name(“iframe”)[0])
driver.switch_to.parent_frame()
driver.switch_to.window(‘main’)

更多窗口操作详见:WebDriver类中查看

五、等待操作

1.强制等待:

# 强制等待就是使用time包中的sleep()函数让程序在调用到此方法时停止或睡眠暂停指定时间
import time

# 单位:s
time.sleep(5) 

2.隐式等待:

from selenium import webdriver


driver = webdriver.Chrome()
# 语法格式:{单位:s}
driver.implicitly_wait(5)
# 特点:
隐式等待整个会话只执行一次,后面每次元素查找都会进行等待操作,
在设置的时间内找到元素就进入下部代码操作,元素未找到就会报错;
# 缺点:
成效比较单一,无法适用于较复杂场景

3. 显示等待(等待[WebDriverWait]+条件[expected_conditions])

# WebDriverWait()参数说明
1.timeout:最长超时时间,默认以秒为单位
2.poll_frequency:轮询频率,检测的间隔步长,默认为0.5s,这里会每隔 0.5 秒调用一次 method 的临时函数
3.ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

# 显示调用需要和until()结合使用
# 公共部分:
# 导包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 写法一{分开编写}:
wait = WebDriverWait(driver=driver, timeout=10)  # 传入dirver 并设置超时时间为10s
element_loator = (By.XPATH, '//span[@id="kw"]')  # 使用元组方式存储元素查找方式及查找表达式
element = wait.until(EC.visibility_of_element_located(locator=element_locator))

# 写法二{组合编写}:
element = WebDriverWait(driver=driver,timeout=10)
			.until(EC.visibility_of_element_located(
				By.XPATH, '//span[@id="kw"]'
				))

# visibility_of_element_located :条件为等待单个元素出现
expected_conditions[EC]类其他常用方法 :
条件解释
visibility_of_element_located判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
visibility_of_all_elements_located判断多个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于0
visibility_of跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element即可
frame_to_be_available_and_switch_to_it判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
alert_is_present判断页面上是否存在alert
element_to_be_selected判断某个元素是否被选中了,一般用在下拉列表
element_to_be_clickable判断某个元素中是否可见并且是enable的,这样的话才叫clickable
presence_of_element_located判断某个元素是否被加到了dom树里,【并不代表该元素一定可见】
presence_of_all_elements_located等待所有元素存在dom树中【并不代表该元素一定可见】
expected_conditions[EC]中不常用的条件方法:
条件解释
title_is判断当前页面的title是否完全等于(==)预期字符串,返回是布尔值
title_contains判断当前页面的title是否包含预期字符串,返回布尔值
text_to_be_present_in_element判断某个元素中的text是否包含了预期的字符串
text_to_be_present_in_element_value判断某个元素中的value属性是否包含了预期的字符串
invisibility_of_element_located判断某个元素中是否不存在于dom树或不可见
staleness_of等某个元素从dom树中移除,注意,这个方法也是返回True或False
element_selection_state_to_be判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator

更多预期条件:更多

六、浏览器窗口切换操作

前言:为什么要做窗口的切换?
当对浏览器进行操作点击,或百度搜索时,会跳出新的窗口,而selenium代码层面并未切换到新的弹窗中,如果不做切换操作,则后续需要在新的弹窗中做元素定位等操作则无法定位获取。所以需要进行窗口切换的操作,转换到需要操作的新窗口,从而进行后续步骤。。。

切换窗口的两种方式:第一种:

步骤:
1.触发打开新窗口的操作
2.强制等待下 sleep(1) //一般情况下需要等待1-3秒
3.获取所有打开的窗口:driver.switch_to.window(win_handle_list [-1])
------获取到的数据为列表形式,一般新打开的窗口可以理解为追加到列表后
4. 切换到指定窗口
代码演示如下:

"""此处以百度点击搜索按钮后的浏览器状态为例:"""
# 导包
from selenium improt webdriver
from selenium.webdriuver.common.by import By
from selenium.webdriver.support.wait import webDriverWait # 导入等待和条件包ES
from selenium.webdriver.support import expected_conditions as ES

"""前置"""
# 打开浏览器进入百度首页,最大化浏览器
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maxmize_window()
# 找到输入框"kw"输入查找内容并点击"su"搜索按钮,页面显示csdn官网
driver.find_element(By.id, "kw").sendkeys("csdn")
driver.find_element(By.id, "su").click()

"""1.触发打开csdn官网新窗口操作"""
# 等待
webDriverWait(driver,10).unitl(EC.visibility_of_any_elements_located(
								By.XPATH, '//a[contains(text(), "- 专业开发者社区")]'
								))
# 点击触发新窗口
driver.find_element(By.XPATH, '//a[contains(text(), "- 专业开发者社区")]').click()
sleep(1)
"""2.获取所有打开的窗口,并切换到新窗口"""
win_handle_list = driver.window_handles # 获取所有窗口
driver.switch_to.window(win_handle_list [-1]) # 使用swich_to.window(win_handle_list [下标])切换窗口

# 切换到新窗口后即可进入后续操作

切换窗口的两种方式:第二种:

显性等待当中有一个条件是关于新窗口的:EC.new_window_is_opened(参数【现在已有的窗口句柄列表】)
返回为Boolean类型,在触发新窗口后判断是否有新窗口有则返回True 否则返回False

步骤:
0.先获取已有的窗口句柄列表:win_list = driver.windows_handles
1.触发打开新窗口的操作
2.WebDriverWait(driver,10).unitl(EC.new_window_is_opened(win_lsit)) 等待条件判断是否有新窗口
3.获取所有打开的窗口:driver.switch_to.window(win_handle_list [-1])
------获取到的数据为列表形式,一般新打开的窗口可以理解为追加到列表后
4. 切换到指定窗口
代码演示如下:

"""前置---同上"""

"""0.获取已有的窗口句柄列表"""
win_list = dirver.window_handles

"""1.触发打开csdn官网新窗口操作"""
# 等待
webDriverWait(driver,10).unitl(EC.visibility_of_any_elements_located(
								By.XPATH, '//a[contains(text(), "- 专业开发者社区")]'
								))
# 点击触发新窗口
driver.find_element(By.XPATH, '//a[contains(text(), "- 专业开发者社区")]').click()
sleep(1)


"""2.webDriverWait判断是否有新窗口打开"""
# 返回True表示有新窗口打开
WebDriverWait(driver, 10).unitl(EC.new_window_is_opened(win_lsit))
"""3.获取所有打开的窗口,并切换到新窗口"""
win_handle_list = driver.window_handles # 获取所有窗口
driver.switch_to.window(win_handle_list [-1]) # 使用swich_to.window(win_handle_list [下标])切换窗口

# 切换到新窗口后即可进入后续操作

七、iframe-即html嵌套iframe切换操作

前言:在页面中前端因为需要分模块设计前端切面展示,一般会使用到iframe来进行html标签嵌套设计,在使用元素定位时,如果要获取嵌套中的html下的标签是无法定位到的,需要切换到指定iframe嵌套标签下才能进行后续操作;如果不切换运行自动化代码会报错找不到标签

1.如何识别元素是否在iframe当中:浏览器使用F12查看即可,如下图:
在这里插入图片描述
例如QQ邮箱的登录首页,检查页面元素可发现,登录按钮的标签在iframe中嵌套

代码示例iframe切换操作:

"""
方法一:
	切换使用driver.switch_to.frame()方法来完成iframe切换操作,其中的参数表达有3中方式,具体如下:
		1. iframe的下标
		2. iframe的name属性值
		3. iframe的webelement对象【driver.find_element(By.XPATH,"表达式")】By.id/tagname/name 都可

	退出:
		1. driver.switch_to.defalut_content() :返回主页面,即浏览器最初打开的页面
	特殊:
		如果有iframe嵌套使用的话,则需要层级switch_to到需要操作的iframe中
		例如:
			iframeA当中,嵌套iframeB
			如果要切换到B,那就再driver.switch_to
			如果要从B回到A,driver.switch_to.parent_frame()

方法二:
	使用等待+EC条件完成iframe切换
	等待时间内指定iframe加载出来则切换到指定iframe
	WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(
	                      iframe的下标/
	                      iframe的name属性/
	                      iframe的WebElement对象[driver.find_elment(iframe的定位策略, 定位表达式)]    
	                       ))



"""
# 示例:
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
"""方法一:"""
# name属性切换到指定iframe
driver.switch_to.frame("login_frame")

# webelement对象切换到指定iframe
driver.swtich_to.frame(driver.find_element(By.NAME, "login_frame"))

# 下标切换到指定的iframe【一般页面中不会有太多的iframe,所以也可以使用下标来进行切换】
driver.swtich_to.frame(1)

"""方法二:"""
# 下标切换到指定的iframe
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(1))
# webelement切换到指定的iframe
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME, "login_frame")))
# name切换到指定的iframe
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("login_frame"))

八、JS弹窗处理---- Alert弹窗

前言:为何要处理js弹窗?js弹窗出现后,页面将无法操作,只有点掉alert弹窗才能继续操作页面元素
JS弹窗示例:https://www.w3school.com.cn/js/js_popup.asp

  1. 对js弹窗处理有指定的处理类 Alert
  2. 在switch_to中也有对应的方法.alert其实现原理就是实例化Alert对象,所以直接引用alert也可进行操作
  3. 处理弹窗的3种方法:
    accept():确定
    dismiss():取消
    send_keys():输入内容

代码示例:

# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.alert import Alert


# 以w3school中的alert弹窗为例
driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=eg_js_alert")
driver.switch_to.frame("iframeResult")
sleep(0.5)
driver.find_element(By.XPATH, '//button[@text(), "试一试"]').click()

# js弹窗跳出后实例化alert对象,并进行操作

Alert(driver).accept()  # 点击弹窗的确认按钮
Alert(driver).dismiss()  # 点击弹窗的取消按钮
Alert(driver).send_keys("内容")  # 在弹窗中输入指定内容

九、下拉框选项处理

1.经典select - option下拉框

  1. 下拉框示例w3school:https://www.w3school.com.cn/tiy/t.asp?f=eg_html_elements_select
  2. 处理下拉框的类 :Select 【导包:from selenium.webdriver.support import Select】
  3. 选择下拉框中值的3种方式:
    select_by_value :option的value属性值
    select_by_index:option所处的下标,从0开始
    select_by_visible_text:option的文本内容
    代码示例:
"""此处以w3school中的下拉框为例:https://www.w3school.com.cn/tiy/t.asp?f=eg_html_elements_select"""
# 导包
from selenium import webdriver
from selenium.common.by import By
from selenium.webdriver.support import Select


# 1.找到需要操作的select元素对象
driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=eg_html_elements_select")
sel = driver.find_element(By.TAG_NAME, "select")


# 2.实例化Select对象
s = Select(sel)

# 3.选值
s.select_by_value("fiat") #option的value属性值
s.select_by_index(1)#option所处的下标,从0开始
s.select_by_visible_text("Audi")#option的文本内容

2.非select下拉框—例如:div+p

非select下拉框选择时,就按正常获取元素一步步操作,没有捷径,以百度首页中的高级搜索为例:

import time
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

"""
2、div+p标签
百度-高级搜索
1) 触发下拉列表出现
2)再在下拉列表当中选择
"""

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
wait = WebDriverWait(driver,15)

# 右上角 - 设置元素 - 点击
driver.find_element_by_id("s-usersetting-top").click()
sleep(1)
# 在显示的下拉列表当中,选择高级搜索
loc = (By.XPATH, '//a[text()="高级搜索"]')

# 如果元素可见了,返回元素对象。如果元素不可见,返回False
element = wait.until(EC.visibility_of_element_located(loc))
element.click()
sleep(1)

# 1、触发下拉列表出现
loc = (By.XPATH, '//div[@class="c-select adv-ft-select"]')
element = wait.until(EC.visibility_of_element_located(loc))
element.click()
sleep(1)
# 2、选值
loc = (By.XPATH, '//p[text()="微软 Word (.doc)"]')
element = wait.until(EC.visibility_of_element_located(loc))
element.click()


time.sleep(7)
driver.quit()

十、鼠标操作

1、操作示例

前言:使用selenium中的ActionChains类对鼠标进行点击,悬停,长按拖拽,释放等操作

1. 导包,下方两种方式均可:

from selenium.webdriver import ActionChains
from selenium.webdriver.common.action_chains import ActionChains
2. 使用方式:
ActionChains的执行原理,当调用ActionChains方法时,不会立即执行鼠标操作,而是将所有鼠标操作存在列表队列中,当调用perform()方法时,按照队列中的顺序依次调用执行鼠标操作方法
3.具体使用步骤及代码示例如下:

"""
具体使用步骤
	1.实例化ActionChains类:
	2.调用鼠标操作的方法
	3.最后执行鼠标操作方法:perform()

下方代码以菜鸟教程中的jsDOM事件案例为例子:https://www.runoob.com/js/js-htmldom-events.html
"""
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get("https://www.runoob.com/htmldom/htmldom-events.html")
driver.maximize_window()
wait = WebDriverWait(driver,15)
locator = (By.XPATH,"//div[text()="Mouse Over Me"]")
element = wait.unitl(EC.visibility_of_element_located(locator))

# 1.实例化
actionc = ActionChains(element)
# 2.调用鼠标操作方法
actionc.move_to_element(element)
actionc.pause(1)
actionc.click(element)
# 3. 调用执行方法
actionc.perform()

"""
还可以使用链式调用,也可以进行鼠标操作
ActionChains(element).move_to_element(element).pause(1).click(element).perform()
"""

2、鼠标操作方法合集

方法注释使用
click(on_element=None)鼠标单击操作
click_and_hold(on_element=None)点击鼠标左键,不松开
context_click(on_element=None)点击鼠标右键
double_click(on_element=None)双击鼠标左键
drag_and_drop(source, target)拖拽到某个元素然后松开socurce:被拖拽元素;target:目标元素
key_down(value, element=None)按下某个键盘上的键与Keys类结合使用
key_up(value, element=None)松开某个键与Keys类结合使用
move_by_offset(xoffset, yoffset)鼠标从当前位置移动到某个坐标两个参数分别代表x,y轴坐标
move_to_element(to_element)鼠标移动到某个元素参数为移动到的元素对象
move_to_element_with_offset(to_element, xoffset, yoffset)在某个元素位置松开鼠标左键
release(on_element=None)在某个元素位置松开鼠标左键
send_keys(*keys_to_send)发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send)发送某个键到指定元素
perform()执行链中的所有动作

以上为鼠标操作的一些方法,具体使用方法可参考本链接:https://www.cnblogs.com/lxbmaomao/p/10389786.html

十一、按键操作–Keys类

Keys类中包含了所有键盘操作,需要使用时,调用对应的变量名即可,使用前需要先进行导包:
from selenium.webdriver.common.keys import Keys

"""
以下为常用的Keys类中的按键,其他按键可在Keys类中查看调用方式
	send_keys(Keys.BACK_SPACE)		删除键BackSpace,每次删除1个字符
	send_keys(Keys.SPACE)			空格键Space
	send_keys(Keys.TAB)				制表键Tab
	send_keys(Keys.ESPACE)			回退键Esc
	send_keys(Keys.ENTER)			回车键Enter
	send_keys(Keys.CONTROL,‘a’)		全选Ctrl+A
	send_keys(Keys.CONTROL,‘c’)		复制CTRL+C
	send_keys(Keys.CONTROL,‘x’)		剪切CTRL+X
	send_keys(Keys.CONTROL,‘v’)		粘贴Ctrl+V
	send_keys(Keys.F1)				键盘F1
	send_keys(Keys.F12)				键盘F12
"""

# 代码示例:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# 以百度搜索回车按键为例

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 找到百度输入框,输入需要查找的内容并点击Enter
driver.find_element(By.id,"kw").send_keys("搜索内容", Keys.ENTER)

十二、JS操作—JavaScript脚本操作页面元素

前言:为什么要使用JS操作页面元素?当使用webdriver的element对象无法操作页面元素时,也可以使用js来操作页面元素,webdriver中有一个方法可以用来执行js脚本语句:driver.execute_script(“js脚本,可写多个使用;隔开”)

  1. WebDriver提供了两个执行JS代码的方法:
    execute_script(script, *args)
    execute_async_script(script, *args)
    两个方法分别为同步执行和异步执行,参数:script表示需要执行的js脚本语言;*args表示需要传递给js的参数
  2. 注意传参使用方式
    当有参数需要传递给js脚本时,其中的JS书写方式略有不同,需要传参的地方使用arguments[下标]来表示参数
    传入参数类似于存储在列表中,按顺序下标进行传参提取
    例如:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait


driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
wait = WebDriverWait(driver,15)

# 使用selenium找到的元素对象,传递给js代码
ele_input = driver.find_element_by_id("kw")
ele_button = driver.find_element_by_id("su")

# js代码中使用arguments来接收参数。可以理解是个列表,通过下标取值。从0开始,根据参数的位置。
js_code = 'arguments[0].value = "搜索内容";' \
          'arguments[1].click()'

driver.execute_script(js_code,ele_input,ele_button)

更多JS相关脚本操作页面元素可参考菜鸟教程-JavaScript操作:https://www.runoob.com/js/js-htmldom-events.html

十三、文件操作

  1. 前言:当有文件上传操作的页面时,需要将本地的文件传递给元素使用时就需要使用到文件操作;
  2. 导包:
  • pip install pywinauto【用于window】
    from pywinauto.keyboard import send_keys
  • pip install pyautogui【使用(跨平台、windows、linux、mac、文件路径不能有中文、不支持多文件上传)】
    import pyautogui
  • 注意:在上传文件时,必须等待文件弹出框出现才可进行选择文件上传操作
# 两种上传文件的使用方式
# 1. window
from pywinauto.keyboard import send_keys
# 例如百度首页中的摄像机元素,点击后需要上传图片,定位并点击到元素后弹出文件夹框
# 选择文件
send_keys("文件路径")
send_keys('{ENTER}') # 回车按钮

# 2.使用pyautogui 通用文件上传包
import pyautogui
# 例如百度首页中的摄像机元素,点击后需要上传图片,定位并点击到元素后弹出文件夹框
# 选择文件上传
pyautogui.typewrite(r'D:\fk88.png') # 选择文件
pyautogui.press(keys='enter',presses=3) # 确认上传【参数:keys:按键;persses:重复按几次; interval=0.0:时间间隔(浮动,可选)】
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值