Python-web自动化-webdriver常用方法总结

'''

本次总结
WebDriver元素定位方法
WebDriver元素常用操作方法
WebDriver操作浏览器常用方法
WebDriver鼠标、键盘操作
元素等待
下拉选择框、弹框、滚动条操作
'''
# 素材地址 https://blog.csdn.net/Yuyu920716/article/details/111620515

import time
# 导包
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
# 创建driver对象

driver = webdriver.Chrome()

url = r"D:\2006\4 scrapy爬虫\Day10_Selenium\code\02-资料\素材\注册A.html"
driver.get(url)
# 浏览器窗口最大化
driver.maximize_window()
# 设置隐式等待
driver.implicitly_wait(10)

# 定位和操作节点(标签),八种元素定位方法
"""
(常用)1.driver.find_element_by_id():根据id属性寻找节点
(常用)2.driver.find_element_by_name():根据name属性寻找节点
(常用)3.driver.find_element_by_class_name():根据class属性寻找节点
4.driver.find_element_by_tag_name(): 根据标签名字寻找节点,返回:符合条件的第一个标签(每个tag都是指同一类,所以tag定位效率低,
        一般不建议使用;tag_name定位就是通过标签名来定位;)
5.driver.find_element_by_link_text()  --> click(): :根据标签文本内容(完整)定位,专门用来定位超链接文本(<a>标签</a>)
6.driver.find_element_by_partial_link_text():根据标签文本内容(局部)定位,
        partial_link_text定位是对link_text定位的补充,partial_like_text为模糊匹配;link_text全部匹配
(常用)7.driver.find_element_by_xpath():根据xpath路径定位标签(找单个)
driver.find_elements_by_xpath():根据xpath路径定位标签(找所有)
8.driver.find_element_by_css_selector():根据css选择器定位标签
"""
# 元素常用操作方法
'''
1. clear()            清除文本
2. send_keys()        模拟输入
3. click()            单击元素
'''
# 操作浏览器常用方法
'''
1. driver.maximize_window()                最大化 --> 模拟浏览器最大化按钮
2. driver.set_window_size(1000,1000)            浏览器大小 --> 设置浏览器宽、高(像素点)
3. driver.set_window_position(300,200)     浏览器位置 --> 设置浏览器位置
4. driver.back()                             后退 --> 模拟浏览器后退按钮
5. driver.forward()                         前进 --> 模拟浏览器前进按钮
6. driver.refresh()                         刷新 --> 模拟浏览器F5刷新
7. driver.close()                            关闭 --> 模拟浏览器关闭按钮(关闭单个窗口)
8. driver.quit()                            关闭 --> 关闭所有WebDriver启动的窗口
'''

# 实例
# find_element_by_id():根据id属性寻找节点
driver.find_element_by_id("userA").send_keys("admin")
time.sleep(1)
# find_element_by_class_name():根据class属性寻找节点
driver.find_element_by_name("passwordA").send_keys("123456")
time.sleep(1)
# find_element_by_class_name():根据class属性寻找节点
driver.find_element_by_class_name("telA").send_keys("18811110000")
time.sleep(1)
# 使用tag_name获取第4个元素
driver.find_elements_by_tag_name("input")[3].send_keys("[email protected]")
time.sleep(1)
# 设置要输入内容的列表
text_list = ['admin', '123456', '18618888811', '[email protected]']
# 获取前四个input标签
inputs = driver.find_elements_by_css_selector("p>input")
# print(inputs)
for i in range(4):
    inputs[i].send_keys(text_list[i])
    time.sleep(1)

inputs[3].clear()

# link1 = driver.find_element_by_link_text("AA 百度 网站")
link1 = driver.find_element_by_partial_link_text("AA")
link1.click()

time.sleep(3)

# WebDriver鼠标操作
'''
# 步骤
1.导入ActionChains包:from selenium.webdriver.common.action_chains import ActionChains
2.创建ActionChains对象:action=ActionChains(driver)   初始化ActionChains对象
3.调用方法(右键):element=Action.context_click(username)
4.执行:element.perform()  必须调用perform()方法才能执行鼠标事件
# 方法
1. context_click()            右击 --> 此方法模拟鼠标右键点击效果
2. double_click()            双击 --> 此方法模拟双标双击效果
3. drag_and_drop()            拖动 --> 此方法模拟双标拖动效果
4. move_to_element()        悬停 --> 此方法模拟鼠标悬停效果
5. perform()                执行 --> 此方法用来执行以上所有鼠标方法
'''
# click()实例:双击,右击
action = ActionChains(driver)  # 初始化ActionChains对象
# user = driver.find_element_by_id("userA")   # 通过id定位节点
# user.send_keys("admin")  # 输入admin
# 调用方法:双击
# action.double_click(user).perform()
# 调用方法:右击
# action.context_click(user).perform()
# time.sleep(2)

# 鼠标拖动-drag_and_drop()
'''
# 步骤
1. 源元素    socure = driver.find_element_by_id("userA")
2. 目标元素  target = driver.find_element_by_id("userA")
3. 调用方法  Action.drag_and_drop(source,target).perform()
'''
# 实例
url = r"D:\2006\4 scrapy爬虫\Day10_Selenium\code\02-资料\素材\drag.html"
# 打开指定的url
# driver.get(url)
# time.sleep(2)
# source = driver.find_element_by_id("div1")
# target = driver.find_element_by_id("div2")
# time.sleep(2)
# action.drag_and_drop(source, target).perform()
# time.sleep(2)

# 鼠标悬停-move_to_element() 模拟鼠标悬停在选中的元素
# 实例
url = r"https://www.baidu.com"
# 打开指定的url
driver.get(url)
time.sleep(1)
# 获取元素
more = driver.find_element_by_name("tj_briicon")
print(more)
time.sleep(2)
# 鼠标悬停
action.move_to_element(more).perform()
time.sleep(5)

# WebDriver键盘操作
# 导包:from selenium.webdriver.common.keys import Keys
'''
# 键盘操作方法
1. send_keys(Keys.BACK_SPACE)删除键(BackSpace) 
2. send_keys(Keys.SPACE)空格键(Space) 
3. send_keys(Keys.TAB)制表键(Tab) 
4. send_keys(Keys.ESCAPE)回退键(Esc) 
5. send_keys(Keys.ENTER)回车键(Enter) 
6. send_keys(Keys.CONTROL,'a') 全选(Ctrl+A) 
7. send_keys(Keys.CONTROL,'c')复制(Ctrl+C)
'''
# 实例
url = r"D:\2006\4 scrapy爬虫\Day10_Selenium\code\02-资料\素材\注册A.html"
# 打开指定的url
driver.get(url)
time.sleep(1)

# 获取两个元素
userA = driver.find_element_by_id("userA")
emailA = driver.find_element_by_id("emailA")

userA.send_keys('admin123')
time.sleep(1)
# 删除
userA.send_keys(Keys.BACK_SPACE)
time.sleep(1)
# 从第一个元素里全选 复制 ctrl+a ctrl+c
userA.send_keys(Keys.CONTROL, "a")  # 全选
userA.send_keys(Keys.CONTROL, "c")  # 复制
# 在第二个元素里粘贴 ctrl+v
emailA.send_keys(Keys.CONTROL, "v")  # 粘贴
time.sleep(2)


# 元素等待: 显式等待(了解) / 隐式等待(常用)
'''
显式等待:
        使WebDriver等待指定元素条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)
步骤:
1. 导包 等待     --> from selenium.webdriver.support.wait import WebDriverWait
2. 导包 判断条件   --> from selenium.webdriver.support import expected_conditions as EC
3. WebDriverWait(driver, timeout, poll_frequency=0.5)
        1). driver:浏览器对象
        2). timeout:超时的时长,单位:秒
        3). poll_frequency:检测间隔时间,默认为0.5秒
4. 调用方法 until(method):直到..时
        1). method:调用EC.presence_of_element_located(element)
                    element:调用By类方法进行定位

隐式等待:(常用)
        等待元素加载指定的时长,超出抛出NoSuchElementException异常,一般常用隐式等待;
        如果定位某一元素定位失败,那么就会触发隐式等待有效时长,如果在指定时长内加载完毕,则继续执行,否则
            抛出NoSuchElementException异常,如果元素在第一次就定位到则不会触发隐式等待时长;
方法:implicitly_wait(timeout)
      (timeout:为等待最大时长,单位:秒)
调用:driver.implicitly_wait(10)
      (driver:为浏览器实例化对象名称)
'''


# WebDriver下拉选择框 操作
# 下拉框就是HTML中<select>元素
'''
步骤:
1. 导包 Select类 --> from selenium.webdriver.support.select import Select
2. 实例化Select类 select=Select(WebElemet)
                    (WebElement):driver.find_element_by_id("selectA"))
3. 调用方法:select.select_by_index(index)
                (index:为列表索引,从0开始)
                
select方法:
1. select_by_index()         --> 根据option索引来定位,从0开始
2. select_by_value()         --> 根据option属性 value值来定位
3. select_by_visible_text()  --> 根据option显示文本来定位

'''
# 实例
url = r"D:\2006\4 scrapy爬虫\Day10_Selenium\code\02-资料\素材\注册A.html"
# 打开指定的url
driver.get(url)
time.sleep(1)
# 常见select对象
select = Select(driver.find_element_by_id("selectA"))

# 通过索引选择 索引从0开始
select.select_by_index(1)
time.sleep(2)

# 通过属性value的值选择
select.select_by_value("gz")
time.sleep(2)

# 通过html显示内容选择
select.select_by_visible_text("A重庆")

print(select.options)
print(len(select.options))

# 所有option标签对象都存在select.options里, 是个列表
for option in select.options:
    option.click()
    time.sleep(2)

time.sleep(2)

# WebDriver弹框 操作
'''
1. 获取弹框 
        alert=driver.switch_to.alert
2. 调用
        alert.text
        alert.accept()
        alert.dismiss()
'''
# 实例
url = r"D:\2006\4 scrapy爬虫\Day10_Selenium\code\02-资料\素材\css_example.html"
# 打开指定的url
driver.get(url)
time.sleep(1)

# 获取元素并点击
driver.find_element_by_xpath("/html/body/input[1]").click()
# 切换到alter弹框
alter = driver.switch_to.alert
time.sleep(1)
# 进行操作
alter.accept()

# 获取元素并点击
driver.find_element_by_xpath("/html/body/input[2]").click()
# 切换到alter弹框
alter = driver.switch_to.alert
time.sleep(1)
# 进行取消操作
print(alter.text)
alter.dismiss()

# 获取元素并点击
driver.find_element_by_xpath("/html/body/input[3]").click()
# 切换到alter弹框
alter = driver.switch_to.alert
time.sleep(1)
# alter.send_keys("哈哈")
time.sleep(2)
# 进行操作
alter.dismiss()

time.sleep(2)


# WebDriver滚动条 操作
'''
1. 设置JavaScritp脚本控制滚动条  js="window.scrollTo(0,1000)"
                                    (0:左边距;1000:上边距;单位像素)
2. WebDriver调用js脚本方法  driver.execute_script(js)
'''
# 实例
url = r"D:\2006\4 scrapy爬虫\Day10_Selenium\code\02-资料\素材\注册A.html"
# 打开指定的url
driver.get(url)
time.sleep(1)

# 向下滚动1000单位
script = "window.scrollTo(0,1000)"
driver.execute_script(script)
time.sleep(2)

# 向右滚动1000单位
script = "window.scrollTo(1000,1000)"
driver.execute_script(script)

time.sleep(2)

# 后面还有html中的iframe标签的表单切换方法,多窗口切换等等,和 UnitTest单元测试框架等,下次再补充

driver.quit()

猜你喜欢

转载自blog.csdn.net/Yuyu920716/article/details/111604997