seleniumAPI常用操作大全&API再封装

文章目录

          • 对象创建
          • 浏览器操作
          • 页面操作
          • 断言assert操作
          • 元素定位的两种方式
          • 元素的八种定位方法
          • 定位一组元素
          • 元素的操作
          • 多标签之间的切换
          • 多表单的切换
          • 鼠标常用操作
          • 键盘常用操作
          • 警告框操作
          • 下拉框操作
          • 调用JS代码
          • 浏览器等待的三种方式
          • cookies操作

前置知识:
selenium环境搭建
CSS选择器和Xpath选择器

以下是常用的selenium API的操作方法,但笔者希望用起来更方便一些,所以封装了常用的操作,文件上传到了附件中附件:API再封装
seleniumAPI常用操作大全&API再封装_第1张图片

对象创建
# 导入相关库
from selenium import webdriver
import time

# 创建一个浏览器对象,其他的见环境搭建
driver = webdriver.Chrome()

# 查看所有方法
print(dir(driver))
浏览器操作
# 设置全屏
driver.maximize_window()
# 设置浏览器尺寸
driver.set_window_size(800,600)
# 获取当前浏览器尺寸
size = driver.get_window_size()
print(size)

# 设置浏览器位置
driver.set_window_position(0,0)
# 获取浏览器位置
position = driver.get_window_position()
print(position)

# 关闭当前标签
# driver.close()
# 关闭所有标签
# driver.quit()
页面操作
# 请求某个url对应的响应
url = "https://www.baidu.com"
driver.get(url)
time.sleep(2)
driver.get("https://passport.csdn.net/login?code=public")
# 刷新页面
time.sleep(2)
driver.refresh()
# 回退上一个页面
time.sleep(2)
driver.back()
# 前进一个页面
time.sleep(2)
driver.forward()
断言assert操作
driver.get("https://passport.csdn.net/login?code=public")
# 获取当前访问页url
print(driver.current_url)
# 获取当前浏览器标题
print(driver.title)
# 保存快照
driver.get_screenshot_as_file("screeshot01.png") # 方式一
date = driver.get_screenshot_as_png() # 方式二 type(date) --> bytes
with open("screenshot02.png","wb") as f:
    f.write(date)
date64 = driver.get_screenshot_as_base64() # 方式三 type(date64) --> str
print(type(date64))
with open("screenshot03.png","w") as f:
    f.write(date64)
# 查看网页源码
sourse = driver.page_source
with open("CSDN.html","wb") as f:
    f.write(sourse.encode()) # str to bytes
元素定位的两种方式
driver.get("https://passport.csdn.net/login?code=public")
# 直接调用(推荐)
el_search = driver.find_element_by_id("toolbar-search-input") # webelement类实例化对象
print(dir(el_search)) # 查看element对象中的方法
el_search.send_keys("TEST") # 传值
el_click = driver.find_element_by_id("toolbar-search-button")
el_click.click()

# 使用By类型
from selenium.webdriver.common.by import By
ele_search = driver.find_element(By.ID,"toolbar-search-input")
ele_search.send_keys("TEST")
ele_click = driver.find_element(By.ID,"toolbar-search-button")
ele_click.click()
元素的八种定位方法
'''
(以下用第一种定位方式举例)
'''
driver.get("https://passport.csdn.net/login?code=public")
driver.find_element_by_css_selector("#app > div > div > div.main > div.main-login > div.main-select > ul > li:nth-child(2) > a").click() #使用账号密码登录
# id定位
el_by_id = driver.find_element_by_id("toolbar-search-input")
el_by_id.send_keys("TestID")
# name属性值定位
el_by_name = driver.find_element_by_name("pwd")
el_by_name.send_keys("TestName")
# 伪类名定位
el_by_className = driver.find_element_by_class_name("user-service-link")
el_by_className.click()
# 标签名定位
el_by_tagName = driver.find_element_by_tag_name("input")
el_by_tagName.send_keys("TestTagName")
# 链接文本定位(注意是文本,不是href;selenium会自动补全相对链接地址)
el_by_linkText = driver.find_element_by_link_text("首页")
el_by_linkText.click()
# 部分链接文本
el_by_partialLinkText = driver.find_element_by_partial_link_text("首")
el_by_partialLinkText.click()
# xpath路径表达式(注意单双引号区分)
el_by_xpath = driver.find_element_by_xpath('//*[@id="tabTwo"]')
el_by_xpath.click()
# css选择器定位
el_by_css = driver.find_element_by_css_selector("#app > div > div > div.main > div.main-login > div.main-process-login > div > div.form-group.form-group-link > div > a")
el_by_css.click()
定位一组元素
'''
find_elements_by_xxx,返回一个列表
视频热榜中的第一条记录的css路径:#floor-sp_66 > div > div.rank_list.sp_rank_wrap > ul > li:nth-child(1) > div > div > a > h4
改写之后获取所有记录:#floor-sp_66 > div > div.rank_list.sp_rank_wrap > ul > li > div > div > a > h4

第一条xpath路径://*[@id="floor-sp_66"]/div/div[2]/ul/li[1]/div/div/a/h4
改写://*[@id="floor-sp_66"]/div/div[2]/ul/li/div/div/a/h4

其他几种方法同理
'''
driver.get("https://www.csdn.net")
el_list = driver.find_elements_by_xpath('//*[@id="floor-sp_66"]/div/div[2]/ul/li/div/div/a/h4')
print(el_list)
元素的操作
# # 点击
# element.click()
# # 清空和输入(只能操作可输入的文本框)
# element.clear()
# element.send_keys()
#
# # 提交
# element.submit()
#
# # 获取文本内容
# element.text
# # 获取属性值
# element.get_attribute("attrName")
# # 获取元素尺寸
# element.size
# # 获取元素是否可见
# element.is_displayed()

# 例:获取视频热榜中的标题
for el in el_list:
    print("标题:",el.text)
多标签之间的切换
driver.get("https://www.csdn.net")
driver.find_element_by_link_text("Python").click()
driver.find_element_by_link_text("Java").click()
# 获取所有窗口的句柄,返回一个列表存储每一个窗口句柄值
handles = driver.window_handles
# 通过窗口的句柄切换
time.sleep(2)
driver.switch_to.window(handles[0])
print(driver.title)
多表单的切换
'''
iframe/frame --> 引用了其他页面的链接,但真正的页面数据并不出现在当前页面源码中
'''
driver.get("https://mail.163.com")
el_frame = driver.find_element_by_tag_name("iframe") # 有反爬措施,id会改变
print(el_frame)

# 切换进入表单中
time.sleep(2)
driver.switch_to.frame(el_frame) # 方式一:先定位,后切换
# driver.switch_to.frame("id") # 方式二:也可以直接使用id进行切换(如果有固定id的话)

el_user = driver.find_element_by_name("email")
el_user.send_keys("TestUser")

# 切换进入最外层页面
driver.switch_to.default_content()
# 切换进入上层页面
driver.switch_to.parent_frame()
鼠标常用操作
'''
鼠标常用操作 ActionChains()类
'''
driver.get("https://www.csdn.net")
from selenium.webdriver import ActionChains

el_logo = driver.find_element_by_css_selector("#csdn-toolbar > div > div > div.toolbar-container-left > div > a > img")
# 鼠标右击操作,操作前需要将元素定位出来并传入相应的动作中;如果要执行操作,需要调用perform()
ActionChains(driver).context_click(el_logo).perform()
# 鼠标双击操作
ActionChains(driver).double_click(el_logo).perform()

el_float = driver.find_element_by_css_selector("#floor-sp_66 > div > div.card_list.sp_card_wrap > div.card_list_wrap > div:nth-child(1) > a > div > div.video > div")
# 鼠标悬停操作
time.sleep(2)
ActionChains(driver).move_to_element(el_float).perform()
键盘常用操作
'''
键盘常用操作 Keys类配合send_keys使用
'''
driver.get("https://www.csdn.net")
el_search = driver.find_element_by_id("toolbar-search-input")
el_search.send_keys("selenium")

from selenium.webdriver.common.keys import Keys
# 全选
time.sleep(1)
el_search.send_keys(Keys.CONTROL,"a")
# 剪切
time.sleep(1)
el_search.send_keys(Keys.CONTROL,"x")
# 粘贴
time.sleep(1)
el_search.send_keys("hello "+Keys.CONTROL,"v")
# 删除
el_search.send_keys(Keys.BACKSPACE) # BACK_SPACE = BACKSPACE
警告框操作
driver.get("https://www.baidu.com")

driver.find_element_by_id("s-usersetting-top").click()
driver.find_element_by_class_name("setpref").click()
time.sleep(2)
driver.find_element_by_css_selector("#se-setting-7 > a.prefpanelgo.setting-btn.c-btn.c-btn-primary").click()

# 进入警告框中
driver.switch_to.alert()
# 进入警告框中,并点击接受
time.sleep(2)
driver.switch_to.alert.accept()
# 进入警告框中,并解散警告框
time.sleep(2)
driver.switch_to.alert.dismiss()
# 发送文本到警告框
# driver.switch_to.alert.send_keys("data")
下拉框操作
'''
下拉框操作 Select类,需要传入对象
'''
driver.get("https://cn.bing.com")
time.sleep(3)
driver.find_element_by_xpath('//*[@id="id_sc"]').click()
time.sleep(1)
driver.find_element_by_css_selector("#hbsettings > div > div.hb_title_col").click()
time.sleep(1)
driver.find_element_by_css_selector("#hbsettree > a:nth-child(4) > div > div.hb_title_col").click()

from selenium.webdriver.support.select import Select
time.sleep(1)
ele_select = driver.find_element_by_id("rpp")
# 将定位到的下拉框元素传入Select类中
selObj = Select(ele_select)
# 调用相应方法选择下拉框中的选项
time.sleep(1)
selObj.select_by_index("0") # 通过索引选择,str
time.sleep(1)
selObj.select_by_value("10") # 通过value值选择
time.sleep(1)
selObj.select_by_visible_text("50") # 通过文本选择

all = selObj.all_selected_options # 查看所有已选
first = selObj.first_selected_option # 查看第一个已选
isMu = selObj.is_multiple # 查看是否多选
opt = selObj.options # 查看选项元素列表
print(all,first,isMu,opt)
调用JS代码
driver.get("https://www.csdn.net")
# 页面滚动
js1 = "window.scrollTo(0,2000)"
js2 = "var q = document.documentElement.scrollTop = 500"
driver.execute_script(js1)
time.sleep(2)
driver.execute_script(js2)

# 循环下拉滚动
for i in range(20):
    js = "window.scrollTo(0,%s)" %(i*100)
    driver.execute_script(js)
    time.sleep(0.5)
浏览器等待的三种方式
'''
浏览器等待
三种方式:
1.显式等待 --> 根据条件进行等待,等待条件出现
2.隐式等待(推荐) --> 尝试发现某个元素的时候,如果没能立刻发现,就等待固定长度的时间
3.固定等待 --> time.sleep,即使加载完了也要等待,浪费时间
'''
driver.get("https://www.csdn.net")
# 显式等待
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver,timeout=10,poll_frequency=0.5,ignored_exceptions=None).until(EC.presence_of_element_located((By.ID,"toolbar-search-input"))) # 在设置的时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过时间检测不到则抛出异常

# 隐式等待
driver.implicitly_wait(10) # 单位为秒,为最大值;在这个最大值内只要定位到就结束等待,否则报错
cookies操作
driver.get("https://www.csdn.net")
# 获取cookies --> 字典dict格式
cookies = driver.get_cookies()
print(cookies)
# 获取key对应的值
# driver.get_cookie(keyName)
# 删除指定名称的cookie
# driver.delete_cookie(name="xx")
# 删除所有cookies
driver.delete_all_cookies()
# 设置cookies
cookie = {
     'domain': '.csdn.net', 'expiry': 1645971310, 'httpOnly': False, 'name': 'Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac', 'path': '/', 'secure': False, 'value': '6525*1*10_18797500640-1614435306890-873769'}
driver.add_cookie(cookie)
print(driver.get_cookies())

你可能感兴趣的:(自动化测试,Python,python,selenium)