当前位置: 首页 > news >正文

Selenium(选择元素,浏览器/元素操作,等待,页面交互)

1.环境准备

1.1 安装selenium

pip install selenium

1.2 下载浏览器驱动,这里以Chrome为例:

点击Chrome右上角三个点--help--about Chrome查看版本

下载对应版本的驱动,这里使用华为云的镜像地址:https://repo.huaweicloud.com/chromedriver/

尽量保证驱动版本和浏览器版本一致,前三位保持一致一般就可以正常使用

把chromedriver.exe放在浏览器application目录下

1.3 设置环境变量

因为Pycharm创建项目时默认使用虚拟环境,所以将驱动地址添加为环境变量使用更方便。
复制chromedriver.exe的文件地址,也就是 C:\Program Files\Google\Chrome\Application,然后添加系统环境变量即可。

2.Selenium语法

from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome() #创建Chrome的实例,代码运行到这里时会打开浏览器
driver.get('https://www.baidu.com')  #访问网址,代码运行到此时会访问百度

2.1 查找元素

建议使用CSS选择器,因为它的效率最高

以上的查找函数只能查找到一个元素,如果这个元素不存在,就会报NosuchElementException,我们想一次查找到多个元素怎么办呢?只需要使用 driver.find_elements(),它的返回值是一个列表,元素出现的先后顺序对应返回值的下标。

2.2 获取元素属性

2.2.1 获取元素尺寸

        element.size

2.2.3 获取元素文本

        element.text

2.2.4 获取元素属性值

        element.get_attribute('属性名')

2.2.5 判断元素是否可见

        element.is_displayed()

2.2.6 判断元素是否可用 

        element.is_enabled()

2.2.7 判断元素是否选中

        element.is_selected()

2.3 浏览器操作

2.3.1 窗口最大化

        driver.maximize_window()

2.3.2 设置窗口大小

        deiver.set_window_size(weight , height)

2.3.3 设置窗口位置

        driver.set_window_position(x, y)

2.3.4 页面后退

        driver.back()

2.3.5 页面前进

        driver.forward()

2.3.6 页面刷新

        driver.refresh()

2.3.7 关闭浏览器

        driver.quit()

2.3.8 关闭当前页面

        driver.close()

2.3.9 获取当前页面标题

        driver.title

2.3.10 获取当前url

        driver.current_url

2.4 等待

        我们知道,代码的执行速度是很快的,如果用户的网络较慢或者页面上的元素是异步加载的导致我们查找元素时该元素还未被加载到页面中,这时候就需要等待,延时一段时间等待元素加载完成。

2.4.1 强制等待

        在代码中直接使用 sleep() 延迟代码的执行时间

2.4.2 隐式等待

        driver.implicitly_wait(timeout),设置完成后对全局有效,如果第一次查找元素未找到就会等待timeout秒后再去查找,如果还未找到则会报错。

2.4.3 显式等待

        element = WebDriverWait(driver, timeout, frequency=0.5).until(lambda x: x.find_element(By.ID, 'id值') )

等待timeout秒,如果第一次没找到那么会间隔frequency秒再去找,直到until里的函数返回值不为False。显式等待不仅可以等待元素,还可以返回找到的元素,如果超时还没找到会报错: TimeOutException

2.5 页面交互操作(下拉框,弹出框,滚动条)

2.5.1 下拉框

        方法一:直接使用元素的click()方法达到选中对应选项的效果

        方法二:使用封装的select对象

from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
select = Select(driver.find_element(By.CSS_SELECTOR ,'#cars')) #元素必须是下拉框对象
select.select_by_index(2)  #通过索引选中选项
select.select_by_value('1') #通过value属性值选中该选项
select.select_by_visible_text('奔驰')  #通过文本选中选项

2.5.2  弹出框

driver = webdriver.Chrome()alert = driver.switch_to.alert //获取了弹出框对象
message = alert.text #获取弹出框文本内容
alert.dismiss() #取消
alert.accept() #确认

2.5.3 滚动条

        selenium自身不能操作滚动条,只能通过js操作。

js = 'window.scrollTo(0,document.body.scrollHeight)'
driver.execute_script(js)

2.6 模拟鼠标操作

actions = ActionChains(driver)
actions.click(driver.find_element(By.CSS_SELECTOR,"#su")) #单击
actions.double_click(driver.find_element(By.ID,"su")) #双击
actions.perform()#可以像上面一样多步操作一起执行,也可以像下面一步一步的执行actions.context_click(driver.find_element(By.ID,"su")).perform() #右击
actions.move_to_element(driver.find_element(By.ID,"su")).perform() #悬停,hover
actions.drag_and_drop(element_source , element_target).perform() #把element_source拖动到element_target的位置

2.7 模拟键盘操作

2.7.1 键盘操作

2.7.2 常用键盘值

driver = webdriver.Chrome()
input_element = driver.find_element(By.ID, "input_element_id")# 输入内容
input_element.send_keys("Hello, World!")
# 发送组合键
input_element.send_keys(Keys.CONTROL, 'a')  # 全选
input_element.send_keys(Keys.CONTROL, 'c')  # 复制
input_element.send_keys(Keys.CONTROL, 'v')  # 粘贴

http://www.lryc.cn/news/571179.html

相关文章:

  • Windows Python 环境管理终极对比:极简方案 VS 传统方案(仅需 2 个软件实现全流程自动化)
  • Selenium(多窗口,frame,验证码,截图,PO模式)
  • rockx读取单张图片并检测图片内人脸的矩形
  • vite的常用配置
  • 「动态规划::数位DP」统计数字递推 / LeetCode 3352|1012(C++)
  • 线程池(Thread Pool)详解
  • 基于Cesium移动的天空云
  • 【Docker基础】Docker核心概念:命名空间(Namespace)之IPC详解
  • 根据Python模块的完整路径import动态导入
  • 05_MinIO+Java SpringBoot 实现透传代理下载
  • 如何确定驱动480x320分辨率的显示屏所需的MCU主频
  • 为何前馈3DGS的边界总是“一碰就碎”?PM-Loss用“3D几何先验”来解
  • Mac 安装JD-GUI
  • 低轨导航 | 低轨卫星导航PNT模型,原理,公式,matlab代码
  • 软件工程:流程图如何画?
  • Python 爬虫入门 Day 5 - 使用 XPath 进行网页解析(lxml + XPath)
  • springboot使用kafka
  • Jmeter的三种参数化方式详解
  • web前端开发核心基础:Html结构分析,head,body,不同标签的作用
  • Java内存模型与线程
  • Anaconda 使用
  • 力扣经典算法篇-17-反转字符串中的单词(逆序遍历,数组分割,正则表达式)
  • 4_STM32F103ZET6芯片系统架构和寄存器
  • 通过自适应训练样本选择弥合基于锚点和无锚点检测之间的差距之ATSS论文阅读
  • 【论文阅读】BACKDOOR FEDERATED LEARNING BY POISONING BACKDOOR-CRITICAL LAYERS
  • Matlab自学笔记五十九:符号变量的代入和替代subs精讲
  • Windows10安装WSL Ubuntu
  • 设计模式:单例模式多种方式的不同实现
  • vue中diff算法的原理
  • 把springboot打包为maven可引入的jar