首页 > 其他分享 >selenium常用知识点

selenium常用知识点

时间:2023-08-11 16:44:20浏览次数:32  
标签:知识点 常用 driver self 元素 selenium element div click

selenium知识点

selenium截屏

  • 全屏截屏:截屏的是可视区域

driver.save_screenshot('baidu1.png')
  • 部分截屏:指定元素截屏

image=driver.find_element(By.XPATH,'//*[@id="app"]/div/div/div[2]/div[3]/div[2]/form/div[3]/div/div/div/div/img')
time.sleep(3)
# driver.save_screenshot('baidu1.png')
image.screenshot('b.png')

eg:识别验证码

第一步:将验证码进行截图

image=self.locator_element(LoginPage.pict)
time.sleep(1)
image.screenshot('a.png')

第二步:将验证码进行灰度化

yzm = cv2.imread('a.png')
yzm = np.min(yzm, axis=2).astype(np.uint8)
cv2.imwrite('a.png', yzm)

第三步:识别验证码(ddddocr技术)

 file = 'a.png'
       path = str(Path(file).absolute())
       ocr = ddddocr.DdddOcr()
       with open(path, 'rb') as f:
           img_bytes = f.read()
           res = ocr.classification(img_bytes)
       print(res)

 

eg:

import time
from pathlib import Path
import  numpy as np

import cv2
import ddddocr
from selenium.webdriver.common.by import By

from base.base_page import BasePage



class LoginPage(BasePage):
   def __init__(self,driver):
       super(LoginPage, self).__init__(driver)

   login_username = (By.XPATH, '//*[@placeholder="请输入用户名"]')
   login_password = (By.XPATH, '//*[@placeholder="请输入密码"]')
   pict=(By.XPATH,'//*[@id="app"]/div/div/div[2]/div[3]/div[2]/form/div[3]/div/div/div/div/img')
   # 验证码框
   input_pict=(By.XPATH,'//*[@placeholder="请输入验证码"]')
   # 点击登录按钮
   click_login=(By.XPATH,'//*[text()="登 录"]')
   def login(self, username, password,):
       self.set_key(LoginPage.login_username, username)
       self.set_key(LoginPage.login_password, password)
       # 识别验证码
       # 第一步:对验证进行截图
       image=self.locator_element(LoginPage.pict)
       time.sleep(1)
       image.screenshot('a.png')
       # 第二步:将验证码进行灰度化
       yzm = cv2.imread('a.png')
       yzm = np.min(yzm, axis=2).astype(np.uint8)
       cv2.imwrite('a.png', yzm)
       # 第三步:识别验证码
       file = 'a.png'
       path = str(Path(file).absolute())
       ocr = ddddocr.DdddOcr()
       with open(path, 'rb') as f:
           img_bytes = f.read()
           res = ocr.classification(img_bytes)
       print(res)
       # 第四步:填入验证码
       self.set_key(LoginPage.input_pict,res)
       time.sleep(10)
       # 点击登录按钮
       self.click(LoginPage.click_login)
       time.sleep(10)

selenium三种等待方式

注意:执行 sleep()后线程休眠,而另外两种线程不休眠

1.强制等待--sleep()

import time
time.sleep(1)

 

2.隐式等待--implicitly_wait(最大等待时长)

原理:隐式等待,就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。注意:在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内不断的刷新页面去寻找我们需要的元素 他是全局等待。

缺点:隐式等待对于有些条件无法生效,比如url的改变,窗口的延迟新增,动态属性延迟加载……

implicitly_wait(10)//隐式等待10s,10s内查到定位,则继续,否则抛出异常

 

3.显示等待--WebDriverWait()

显示等待是Selenium客户可以使用的命令式过程语言。主要思想是最长等待n秒,n秒内每隔一段时间去检查需要定位的元素是否存在(默认检测频率为0.5s),若存在则提前结束等待。若超时未找到则报错。默认抛出异常为:NoSuchElementException。这种等待比隐性等待更智能了一些,无视整个页面的加载,只要需要的元素存在了,就结束等待。显示等待不仅针对元素定位有效,而且可以针对某种行为(url的改变,属性的延迟加载)看它是否具备了一定的特征,就开始有所动作了。

from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
#driver:浏览器驱动
#timeout:最长等待时间,默认以秒为单位
#poll_frequency:监测的时间间隔,默认为0.5秒
#ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
#WebDriverWait一般有until和until_not方法配合使用
until(method,message='')
# 调用该方法提供的驱动程序作为一个参数,直到返回值为True。

until_not(method,message = '')
# 调用该方法提供的驱动程序作为一个参数,直到返回值为False。

#expected_conditions类提供的预期条件判断的方法

title_is                                #判断当前页面的标题是否等于预期

title_contains                          #判断当前页面的标题是否包含预期字符串

presence_of_element_located             #判断元素是否被加在DOM树里,并不代表该元素一定可见

visibility_of_element_located           #判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于0)

visibility_of                           # 与上一个方法作用相同,只是上一个方法参数为定位,该方法接收的参数为定位后的元素

presence_of_all_elements_located        #判断是否至少有一个元素存在于DOM树中。例如,在个页面中有n个元素的class为"wp",那么只要有一个存在就返回true

text_to_be_present_in_clement           #判断某个元素中的text是否包含了预期的字符串

text_to_be_present_in_element_value     #判断某个元素的value属性是否包含了预期的字符串

frame_to_be_available_and_switch_to_it  #判断该表单是否可以切换进去,如果可以,返回True并且switch进去,否则返回false

invisibility_of_element_located         #判断某个元素是否不存在于DOM树或不可见

element_to_be_clickable                 #判断元素是否可见并且是可以点击的

staleness_of                            #等到一个元素从DOM树中移除

element_to_be_selecte                   #判断某个元素是被选中,一般用在下拉列表

element_sclection_state_to_be           #判断某个元素的选中状态是否符合预期

element_located_selection_state_to_be   #与上一个方法作用相同,只是-上一个方法参数为定位后的元素,该方法要收的参数为定位

alert_is_presen                         #判断页面上是否存在alert

一般用时显示等待+隐式等待一起用:隐式等待作用于全局,确保每一个你查找的元素都能够有足够的load时长,以便找到它使脚本正常运行。显示等待作用于你当前使用函数查找的这个元素,确保它快速高效的找到,显示等待不会管其他你要查找的元素的。

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

self.driver.implicitly_wait(60)
           WebDriverWait(self.driver,50,poll_frequency=0.5).until(EC.presence_of_element_located(self.click_project))
self.click(self.click_project)

模拟鼠标进行点击

模拟鼠标要用selenium的ActionChains类进行实现

1.ActionChains方法


perform(self)–执行鼠标操作方法
reset_actions()–清楚操作子令
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):拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) :拖拽到某个坐标然后松开
key_down(value, element=None):按下某个键盘上的
key_up(value, element=None) :松开某个
move_by_offset(xoffset, yoffset):鼠标从当前位置移动到某个坐标
move_to_element(to_element) :鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset):移动到
距某个元素(左上角坐标)多少距离的位置
pause(seconds):暂停操作(秒)
release(on_element=None):在元素上释放按住的鼠标按钮
send_keys(*keys_to_send):发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) :发送某个键到指定元素

2.ActionChains使用步骤

#1.实例化:actions = ActionChains(driver)
#2.调用鼠标操作方法:actions.move_to_element(menu)
#3.执行鼠标操作方法:actions.perform()

def click_mouse(self,loc):
    close = self.locator_element(loc)
    actions = ActionChains(self.driver)
    actions.move_to_element(close).click().perform()
 

标签:知识点,常用,driver,self,元素,selenium,element,div,click
From: https://www.cnblogs.com/MaybeGut/p/17623372.html

相关文章

  • Linux shell 脚本常用指南
    常用语法变量#!/bin/bash#字符串USER_NAME="shell"#数字AGE=25echo${USER_NAME}echo${AGE}数组#!/bin/bash#普通数组定义USER_IDS=(1234)echo${USER_IDS[0]}echo${USER_IDS[1]}echo${USER_IDS[2]}echo${USER_IDS[3]}USER_IDS[0]=-1echo${USER_IDS[......
  • 每日一个软考知识点之【CRC校验】
    CRC校验的原理(此图引用自知乎)发送方可以通过一定的算法生成校验位,然后接收方通过相同的算法验证一边,确保数据的真实性完整性。 几个重要的概念POLY:可以多项式表达,也可以用2进制或者16进制来表达,比如说多项式为G(x)=x^5+x^3+x+1,用二进制显示就是101011,用十六进制......
  • javascript 数组(array) 常用的方法集锦(上)
    由于三大框架的出现,对DOM的操作转成对数据的操作,对数据的操作主要体现在数组和对象上,今天就以数组为例,对数组的各种操作进行总结欢迎访问幸福拾荒者,一个前端知识总结分享平台,与大家一起共同成长共同进步!......
  • Selenium Web 自动化 - Selenium(Java)环境搭建 (new)
    SeleniumWeb自动化-Selenium(Java)环境搭建(new)2023-08-110背景开发工具idea代码管理mavenjdk1.8webdriverchrome1chromedriver&chromechromedriver和chrome要对应上:chomedriver下载地址:淘宝镜像 这里用的是 chromedriver88-0-4324-96.zipchrome下载地址:......
  • ES 常用查询语句
    配置查询_cluster/settings_cluster/settings?flat_settings_cluster/settings?include_defaults_cluster/settings?include_defaults&flat_settings/_stats/fielddata/_stats/fielddata?fields=*/_nodes/stats/indices/fielddata?fields=*/_nodes/stats/indices/fielddata?l......
  • CTF Crypto 常用函数库的常见函数使用
    发现有些博客里面写的不是很全,而且自己也懒得去找。一个菜鸡一边学一边补充的,没写完。Crypto.Util.number\(int\rightarrowbytes\)#long_to_bytes()'''将整数转化成byte字符串:param 要转化的数字(int):return 转化结果(byte)'''>>>long_to_bytes(112615676672893)......
  • 爬虫之selenium
    一、selenium模块之前,我们爬虫是模拟浏览器,但始终不是用的浏览器,但今天我们要说的是另一种爬虫方式,这次不是模拟浏览器,而是用程序去控制浏览器进行一些列操作,也就是selenium。selenium是python的一个第三方库,对外提供的接口可以操控浏览器,比如说输入、点击,跳转,下拉等......
  • PyTorch学习记录(四):常用网络Backbone
    常用网络BackboneResNetMobileNetTransformer参考链接torchvision/timm库https://pytorch.org/vision/main/models.html......
  • JavaScript常用校验类方法
    #前端常用校验类工具方法#邮箱exportconstisEmail=(s)=>{return/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)}123#手机号码exportconstisMobile=(s)=>{return/^1[0-9]{10}$/.test(s)}123#电话号码e......
  • python与selenium
    seleniumIDE脚本语言记录(录制) 屏幕操作(回放)seleniumRC自动化脚本selenium GRID分布式定位页面元素八种方式定位表格定位某个单元格 定位表格的子元素定位网页:静态网页动态网页......