python selenium(下)

本文详细介绍了Selenium的行为链使用,包括单击、双击、拖放等动作,并展示了如何进行Cookie操作,如获取、处理和删除Cookie。同时,讲解了页面等待的两种类型——隐式等待和显示等待,以及如何设置预期条件。此外,还涵盖了Selenium中窗口的新增、切换、关闭等操作,帮助读者深入理解Selenium自动化测试的实用技巧。
摘要由CSDN通过智能技术生成

selenium

selenium使用方法

行为链

  • 介绍 —— 模拟操作鼠标的一系列动作完成某个具体操作,这一系列动作称为行为链。selenium可以通过ActionChains类来完成这些行为链

  • 调用方法:
    from selenium.webdriver.common.action_chains import ActionChains
    行为链变量 = ActionChains(变量) —— ‘变量’为《selenium(上)》里chromedriver调用方法的变量

  • 行为链变量常使用的方法

方法含义
click(on_element = None)单击一个元素,如果为None,则单击当前鼠标位置
click_and_hold(on_element = None)在元素上按住鼠标左键,如果为None,则单击当前鼠标位置
context_click(on_element = None)在元素上单击鼠标右键,如果为None,则单击当前鼠标位置
double_click(on_element = None)双击一个元素,如果为None,则单击当前鼠标位置
drag_and_drop(source,target)拖动元素,source为元素的初始位置,target为元素被拖动的目标位置
key_down(value,element=None)按下按键(Crrl、Alt和Shift),如果element为None,发送按键到当前元素位置(通常element参数为None)
key_up(value, elemnet=None)松开按键(Crrl、Alt和Shift),如果element为None,发送按键到当前元素位置(通常element参数为None)
move_to_element(to_element)将鼠标移动到元素中间,to_element参数为需要移动到的元素
pause(seconds)暂停输入多少秒
perform()保存全部行为动作,需要在行为链最后一行写入
release(on_element=None)松开鼠标左键(配合click_and_hold方法使用),如果为None,则在当前鼠标位置松开

cookie操作方法

  • 获取cookie流程
    • 获取cookie所有数据
    • 提取cookie需要的数据
    • 处理数据成cookie
  • 删除cookie
获取cookie所有数据:

cookie变量 = 变量.getcookies() —— 获取cookie所有内容(返回list对象)

from selenium import webdriver
drive = webdriver.Edge()
drive.get('https://www.baidu.com')
cookie = drive.get_cookies()
print(cookie)
'''
[{'domain': '.baidu.com', 'expiry': 1609837151, 'httpOnly': False, 'name': 'BA_HECTOR', 'path': '/', 'secure': False, 'value': '8t0420aka4252l6h6i1fv872f0r'}, {'domain': '.baidu.com', 'expiry': 3757317198, 'httpOnly': False, 'name': 'BAIDUID_BFESS', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '98CDE28CD1BD0965BAD73441747032A7:FG=1'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '33425_1452_33403_33306_31253_33284_33286_33343_33313_33312_33311_33310_33335_33309_26350_33308_33307_33267_33389_33370'}, {'domain': '.baidu.com', 'expiry': 1641369551, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '98CDE28CD1BD0965D3E91C8785CBFE85:FG=1'}, {'domain': '.baidu.com', 'expiry': 3757317198, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '98CDE28CD1BD0965BAD73441747032A7'}, {'domain': '.baidu.com', 'expiry': 3757317198, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1609833551'}, {'domain': 'www.baidu.com', 'expiry': 1610697551, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}]
'''
提取cookie需要的数据
  • 列表中每个字典的name值和value值是cookie需要的数据(如下图),并用等号相连。(数据如上面代码块,)

cookie数据
cookie = [item[name] + '=' + item[value] for item in cookie]
print(cookie)
'''
['BA_HECTOR=8t0420aka4252l6h6i1fv872f0r', 'BAIDUID_BFESS=98CDE28CD1BD0965BAD73441747032A7:FG=1', 'H_PS_PSSID=33425_1452_33403_33306_31253_33284_33286_33343_33313_33312_33311_33310_33335_33309_26350_33308_33307_33267_33389_33370', 'BAIDUID=98CDE28CD1BD0965D3E91C8785CBFE85:FG=1', 'BIDUPSID=98CDE28CD1BD0965BAD73441747032A7', 'PSTM=1609833551', 'BD_UPN=12314753', 'BD_HOME=1']
'''
处理数据成cookie
  • cookie的每个值之间用分号分割且有一个空格
cookie_str = '; '.join(item for item in cookie)
print(cookie_str)
'''
BA_HECTOR=8t0420aka4252l6h6i1fv872f0r; BAIDUID_BFESS=98CDE28CD1BD0965BAD73441747032A7:FG=1; H_PS_PSSID=33425_1452_33403_33306_31253_33284_33286_33343_33313_33312_33311_33310_33335_33309_26350_33308_33307_33267_33389_33370; BAIDUID=98CDE28CD1BD0965D3E91C8785CBFE85:FG=1; BIDUPSID=98CDE28CD1BD0965BAD73441747032A7; PSTM=1609833551; BD_UPN=12314753; BD_HOME=1
'''
删除cookie
  • 使用方法:
    • 删除指定cookie
      变量.delete_cookie(‘指定cookie值’)
    • 删除所有cookie
      变量.delete_all_cookies()

页面等待

  • 简介 —— 网页内的元素可能在不同的时间载入,因此会加大定位元素或操作元素的困难程度,页面等待是为解决这个问题
  • 两种类型 —— 隐式等待和显示等待
    • 隐式等待 —— 如果能找到相关数据时会直接执行后续程序,如果不能找到相关数据时,会根据设置的时间进行等待
    • 显示等待 —— 当确定的条件触发后才执行后面的程序
隐式等待
  • 使用方法:
    变量.implicitly_wait(seconds)
显示等待
  • 显示等待的条件触发需要配合预期条件来完成

    • 显示等待的调用:
      from selenium.webdriver.support.ui import WebDriverWait
    • 预期条件的调用:
      from selenium.webdriver.support import expected_conditions
  • 使用方法:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions

    WebDriverWait(变量, seconds).unitl(expected_conditions.text_to_be_present_in_element_value(locator=(By.ID,‘id值’), text)) —— 以文本会出现在指定元素的值里举例(locator为元组)

预期条件支持的常用方法(expected_conditions的方法)
  • locator参数 —— 使用By方法定位元素的元组,例:(By.ID,‘id值’)
  • element参数 —— 获取的WebElement元素对象
  • 通常未达到预期条件的均会报错
方法含义
element_located_selection_state_to_be(locator,is_selected)定位一个元素并检查选中状态是否符合预期。is_selected是布尔值
element_located_to_be_selected(locator)等待选中locator参数元素
elemnet_selection_state_to_be(element, is_selected)判断element参数元素的选中状态是否符合预。is_selected参数为布尔值
element_to_be_clickable(locator)判断locator参数元素是否可点击(locator元素必须可见且可被使用)
element_to_be_selected(element)判断element参数元素是否被选中(常用于下拉列表)
invisibility_of_element_located(locator),invisibility_of_element(element)判断元素是否在DOM里不可见
presence_of_all_elements_located(locator)判断locator参数元素在DOM里至少有1个。返回值是最少1个元素的列表
presence_of_element_located(locator)判断locator参数元素是否在DOM里(locator元素不一定可见)
text_to_be_present_in_element(locator, text)判断text参数是否在locator参数元素中
text_to_be_present_in_element_value(locator, text)判断text参数是否在locator参数元素的值中
visibility_of(element)判断element参数元素在DOM里可见且高和宽必须大于0
visibility_of_all_elements_located(locator)判断locator参数元素在DOM里可见且高和宽必须大于0(如果locator参数在DOM,返回WebElement列表)
visibility_of_any_elements_located(locator)判断locator参数元素至少有一个在网页上可见(返回WebElement列表)
visibility_of_element_located(locator)判断locator参数元素在DOM里可见且高和宽必须大于0

多窗口操作

新增窗口
  • 使用方法:
    变量.execute_script(‘window.open(“url”)’)
切换窗口
  • 使用方法(共两种):
    • 第一种方法:
      变量.switch_to_window(变量.window_handles[index]) —— index参数是索引值,从0开始
    • 第二种方法:
      变量.switch_to.window(变量.window_handles[index])
关闭窗口
  • 使用方法:
    变量.close() —— 关闭当前窗口,如果仅打开一个窗口则关闭浏览器
关闭浏览器
  • 使用方法:
    变量.quit() —— 关闭浏览器并退出驱动程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值