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

每天免费体验6小时的云电脑/汕头seo优化培训

每天免费体验6小时的云电脑,汕头seo优化培训,网站建设域名空间,流行的动态网站开发语言介绍页面元素定位方法及校验 使用比较多的是通过id、class和xpath来对元素进行定位。在定位前可以现在浏览器验证是否可以找到指定的元素。这样就不用每添加一个元素定位都运行代码来检查定位方式表达式是否正确。 使用XPATH定位 在浏览器F12,找到元素,在元…

页面元素定位方法及校验

使用比较多的是通过id、class和xpath来对元素进行定位。在定位前可以现在浏览器验证是否可以找到指定的元素。这样就不用每添加一个元素定位都运行代码来检查定位方式表达式是否正确。

  • 使用XPATH定位
    在浏览器F12,找到元素,在元素区域 Ctrl+F,在输入框输入XPATH表达式。如果可以找到就说明表达式没问题。

  • 通过id定位
    浏览器F12,找到控制台,在控制台输入document.getElementById(‘具体的元素id’),然后回车,如果可以找到,也说明没问题。

  • 通过class定位
    F12浏览器,找到控制台,在控制台输入document.getElementsByClassName(‘类名’),然后回车,如果可以找到,说明可以用次方法定位。
    例如,百度首页的输入框。
    在这里插入图片描述
    通过id或class来定位,可以找到相应的元素。注意:通过getElementsByClassName()方法返回的是一个列表。

    document.getElementById(‘kw’)
    document.getElementsByClassName(‘s_ipt’)

    在控制台输入表达式,结果如下:
    在这里插入图片描述
    通过xpath定位,可以使用相对路劲也可以使用绝对路径。但一般使用相对路劲,表达式会更简洁一些。

    绝对路径:/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input
    相对路径://i[@title=‘清空’]/…/input

    分别在元素模块进行搜索,都能找到唯一一个结果:
    在这里插入图片描述
    在这里插入图片描述

对具有属性style=“display: none;” 的元素定位

具有style=“display: none;” 属性的元素,不会显示也不会占用位置,selenium直接定位的话是定位不到的。
但可以使用显式等待,判断元素是否存在于DOM树中来查找,如下:

locator = (By.ID, '元素ID')
element = WebDriverWait(self.driver, timeout, 0.2).until(EC.presence_of_element_located(locator))

点击元素报错ElementClickInterceptedException的解决方法

通常情况下,是因为元素还未加载出来或者被遮挡从而导致元素不可点击。
但有时尽管使用显示等待,等元素可点击时再进行点击,也有概率报错:ElementClickInterceptedException: Message: element click intercepted。
通过在点击前强制等待 0.5秒,也还是有报错的几率。于是尝试在点击报错的情况下,换用js的方式来实现元素点击,目前没遇到报错。如下:

'''此处省略了其他模块的导入'''
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECclass basepage:def find_element(self, locator):by, value = locatorreturn self.driver.find_element(by=by, value=value)def wait_and_find_element(self, locator, timeout=30):'''等待元素可被定位后,返回元素'''try:return WebDriverWait(self.driver, timeout).until(EC.visibility_of_element_located(locator))def click_byjs_if_error(self, locator, timeout=30):""" 如果点击元素报错,则尝试换用js点击 """try:ele = WebDriverWait(self.driver, timeout).until(EC.element_to_be_clickable(locator))ele.click()except ElementClickInterceptedException:ele = self.driver.find_element(locator)self.driver.execute_script("arguments[0].click();", ele)except TimeoutException:ele = self.driver.wait_and_find_element(locator)self.driver.execute_script("arguments[0].click();", ele)

3.5.元素定位报错find_element() argument after * must be an iterable, not method

主要是因为元素定位的命名locator和函数命名重复了。将locator换个名称就好了。如下面的代码中,既存在名为fun_name的函数,也存在名为fun_name的定位元祖。将函数或者元祖更名就好了。

class page:def __init__(self):"""初始化,构造函数"""def find_element(self, locator):by, value = locatorreturn self.driver.find_element(by=by, value=value)def fun_name(self):"""函数具体内容"""fun_name = (By.XPATH, "//i[@title='清空']/../input")def fun_2(self):ele = self.driver.find_element(self.fun_name)

canvas实现的签名功能,用selenium模拟签名

先模拟鼠标按下并移动事件,触发签名。
再获取canvas的上下文,通过canvas的API来实现图片的绘制。
如下:

def sign_by_js(self, locator):"""通过js实现签名,locator为canvas的定位元组"""element = self.wait_and_find_element(locator)script = """var mouseDownEvent = new MouseEvent('mousedown', {'view': window,'bubbles': true,'cancelable': true});var mouseMoveEvent = new MouseEvent('mousemove', {'view': window,'bubbles': true,'cancelable': true,'clientX': 100, // 移动到x坐标100的位置'clientY': 50  // 移动到y坐标50的位置});arguments[0].dispatchEvent(mouseDownEvent); # 触发鼠标按下事件arguments[0].dispatchEvent(mouseMoveEvent);# 触发鼠标移动事件"""self.driver.execute_script(script, element)# 绘制路径,这里写死了,可自由调整script = """var canvas = arguments[0];var ctx = canvas.getContext("2d");  ctx.fillStyle = "black";ctx.beginPath();  // 创建一条路径ctx.moveTo(80, 80);  //起点ctx.lineTo(120, 80);  //终点ctx.stroke();  // 绘制ctx.font = "Bold 40px 幼圆"; //设置字体ctx.textAlign = "center";  //设置对其方式ctx.fillStyle = "#0000FF"; //设置字体颜色ctx.fillText("文字", 170, 80);  //绘制文本,第一个参数为具体的文字,第二、三个参数为需要绘制的位置ctx.closePath();"""self.driver.execute_script(script, element)

相关文章:

selenium元素定位校验以及遇到的元素操作问题记录

页面元素定位方法及校验 使用比较多的是通过id、class和xpath来对元素进行定位。在定位前可以现在浏览器验证是否可以找到指定的元素。这样就不用每添加一个元素定位都运行代码来检查定位方式表达式是否正确。 使用XPATH定位 在浏览器F12,找到元素,在元…...

在AndroidStudio中新建项目时遇到的Gradle下载慢问题,配置错的按我的来,镜像地址不知道哪个网页找的,最主要下载要快

android-studio-2024.2.1.11-windows Android 移动应用开发者工具 – Android 开发者 | Android Developers https://r4---sn-j5o76n7z.gvt1-cn.com/edgedl/android/studio/install/2024.2.1.11/android-studio-2024.2.1.11-windows.exe?cms_redirectyes&met1731775…...

用mv命令替换rm命令

# 用mv命令替换rm命令 主要内容来源自以上博文 rm命令穷凶极恶,以下为替换命令的方式,必做 步骤 修改vim ~/.bashrc加入以下代码 mkdir -p ~/.trash #在家目录下创建一个.trash文件夹(隐藏文件,ls -a 查看) alias rmdel #使用别名…...

电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现

电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现 电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现,它主要应用于铜电解精炼的最后阶段,即从阴极板上剥离出纯铜的过程。以下是该技术的几个关键点&#xff…...

【qt】控件2

1.frameGeometry和Geometry区别 frameGeometry是开始从红圈开始算,Geometry从黑圈算 程序证明:使用一个按键,当按键按下,qdebug打印各自左上角的坐标(相当于屏幕左上角),以及窗口大小 Widget::Widget(QWid…...

Frida反调试对抗系列(四)百度加固

本文只是交流技术,如有侵权请联系我删除。 知识星球:https://t.zsxq.com/kNlj4 前言: 上一篇文章我们提到 我们使用github开源魔改好的frida server 但是仍然有一些厂商的server不能通过,那么这篇文章针对百度加固 进行快速通…...

Redis 安全

Redis 安全 Redis是一个开源的,高性能的键值存储系统,它通常被用作数据库,缓存和消息代理。由于其高性能和简单的API,Redis在全球范围内被广泛使用。然而,与其他数据库系统一样,Redis的安全性也是至关重要…...

上交大与上海人工智能研究所联合推出医学多语言模型,模型数据代码开源

今天为大家介绍的是来自上海交通大学的王延峰与谢伟迪团队的一篇论文。开源的多语言医学语言模型的发展可以惠及来自不同地区、语言多样化的广泛受众。 来源丨 DrugAI、 机器人的脑电波 论文:https://www.nature.com/articles/s41467-024-52417-z MMedC&#xff1…...

网络安全:我们的安全防线

在数字化时代,网络安全已成为国家安全、经济发展和社会稳定的重要组成部分。网络安全不仅仅是技术问题,更是一个涉及政治、经济、文化、社会等多个层面的综合性问题。从宏观到微观,网络安全的重要性不言而喻。 宏观层面:国家安全与…...

理解 Python 中的 __getitem__ 方法:在自定义类中启用索引和切片操作

理解 Python 中的 __getitem__ 方法:在自定义类中启用索引和切片操作 在Python中,__getitem__是一个特殊方法,属于数据模型方法之一,它使得Python对象能够支持下标访问和切片操作。这个方法提供了一种机制,允许类的实…...

【数据结构】【线性表】【练习】反转链表

申明 该题源自力扣题库19&#xff0c;文章内容&#xff08;代码&#xff0c;图表等&#xff09;均原创&#xff0c;侵删&#xff01; 题目 给你单链表的头指针head以及两个整数left和right&#xff0c;其中left<right&#xff0c;请你反转从位置left到right的链表节点&…...

vue2+3 —— Day5/6

自定义指令 自定义指令 需求&#xff1a;当页面加载时&#xff0c;让元素获取焦点&#xff08;一进页面&#xff0c;输入框就获取焦点&#xff09; 常规操作&#xff1a;操作dom “dom元素.focus()” 获取dom元素还要用ref 和 $refs <input ref"inp" type&quo…...

汽车资讯新视角:Spring Boot技术革新

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

关于win11电脑连接wifi的同时,开启热点供其它设备连接

背景&#xff1a; 我想要捕获手机流量&#xff0c;需要让手机连接上电脑的热点。那么问题来了&#xff0c;我是笔记本电脑&#xff0c;只能连接wifi上网&#xff0c;此时我的笔记本电脑还能开启热点供手机连接吗&#xff1f;可以。 上述内容&#xff0c;涉及到3台设备&#x…...

【Apache Paimon】-- 2 -- 核心特性 (0.9.0)

目录 1、实时更新 1.1、实时大批量更新 1.2、支持定义合并引擎 1.3、支持定义更新日志生成器 2、海量数据追加处理 2.1、append table 2.2、快速查询 3、数据湖功能&#xff08;类比&#xff1a;hudi、iceberg、delta&#xff09; 3.1、支持 ACID 事务 3.2、支持 Time…...

golang对日期格式化

1.对日期格式化为 YYYY-mm-dd, 并且没有数据时&#xff0c;返回空 import ("encoding/json""time" )type DateTime time.Timetype SysRole struct {RoleId int64 gorm:"type:bigint(20);primary_key;auto_increment;角色ID;" json:&quo…...

【数据结构与算法】排序

文章目录 排序1.基本概念2.分类2.存储结构 一.插入排序1.1直接插入排序1.2折半插入排序1.3希尔排序 二.选择排序2.1简单选择排序2.2堆排序 三.交换排序3.1冒泡排序3.2快速排序 四.归并排序五.基数排序**总结** 排序 1.基本概念 排序&#xff08;sorting&#xff09;又称分类&…...

前端常见的几个包管理工具详解

文章目录 前端常见的几个包管理工具详解一、引言二、包管理工具详解1、npm1.1、npm的安装与使用 2、yarn2.1、yarn的安装与使用 3、pnpm3.1、pnpm的安装与使用 三、步骤二4、包管理工具的选择 四、总结优缺点对比 前端常见的几个包管理工具详解 一、引言 在前端开发的世界里&…...

PyAEDT:Ansys Electronics Desktop API 简介

在本文中&#xff0c;我将向您介绍 PyAEDT&#xff0c;这是一个 Python 库&#xff0c;旨在增强您对 Ansys Electronics Desktop 或 AEDT 的体验。PyAEDT 通过直接与 AEDT API 交互来简化脚本编写&#xff0c;从而允许在 Ansys 的电磁、热和机械求解器套件之间无缝集成。通过利…...

腾讯云存储COS上传视频报错

bug表现为&#xff1a;通过COS上传视频时报错"Class \"QCloud\\COSSTS\\Sts\" not found" 修复办法为&#xff1a;找到文件crmeb/services/upload/storage/Cos.php 将Sts引入由QCloud\COSSTS\Sts;改为crmeb\services\upload\extend\cos\Sts; 修改后重启服…...

Tomcat(17) 如何在Tomcat中配置访问日志?

在Apache Tomcat中配置访问日志是一个重要的步骤&#xff0c;它可以帮助你跟踪和分析服务器的HTTP请求。访问日志通常记录了每个请求的详细信息&#xff0c;如客户端IP地址、请求时间、请求的URL、HTTP状态码等。以下是如何在Tomcat中配置访问日志的详细步骤和代码示例。 步骤…...

根据频繁标记frequent_token,累加size

根据频繁标记frequent_token,累加size for k, v in contents.items(): 0 (LDAP Built with OpenLDAP LDAP / SDK, /:=@) 1 (LDAP SSL support unavailable, :) 2 (suEXEC mechanism enabled lili wrapper /usr/sbin/suexec, ()/:) 3 (Digest generating secret for digest au…...

2、计算机网络七层封包和解包的过程

计算机网络osi七层模型 1、网络模型总体预览2、数据链路层4、传输层5.应用层 1、网络模型总体预览 图片均来源B站&#xff1a;网络安全收藏家&#xff0c;没有本人作图 2、数据链路层 案例描述&#xff1a;主机A发出一条信息&#xff0c;到路由器A&#xff0c;这里封装目标MAC…...

无人机飞手入门指南

无人机飞手入门指南旨在为初学者提供一份全面的学习路径和实践建议&#xff0c;帮助新手快速掌握无人机飞行技能并了解相关法规知识。以下是一份详细的入门指南&#xff1a; 一、了解无人机基础知识 1. 无人机构造&#xff1a;了解无人机的组成部分&#xff0c;如机身、螺旋桨…...

Redis与IO多路复用

1. Redis与IO多路复用概述 1.1 Redis的单线程特性 Redis是一个高性能的键值存储系统&#xff0c;其核心优势之一便是单线程架构。在Redis 6.0之前&#xff0c;其所有网络IO和键值对的读写操作都是由一个主线程顺序串行处理的。这种设计简化了多线程编程中的锁和同步问题&…...

基于Java和Vue实现的上门做饭系统上门做饭软件厨师上门app

市场前景 生活节奏加快&#xff1a;在当今快节奏的社会中&#xff0c;越来越多的人因工作忙碌、时间紧张而无法亲自下厨&#xff0c;上门做饭服务恰好满足了这部分人群的需求&#xff0c;为他们提供了便捷、高效的餐饮解决方案。个性化需求增加&#xff1a;随着人们生活水平的…...

spi 回环

///tx 极性0 &#xff08;sclk信号线空闲时为低电平&#xff09; /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …...

数据库审计工具--Yearning 3.1.9普民的使用指南

1 页面登录 登录地址:18000 &#xff08;不要勾选LDAP&#xff09; 2 修改用户密码 3 DML/DDL工单申请及审批 工单申请 根据需要选择【DML/DDL/查询】中的一种进行工单申请 填写工单信息提交SQL检测报错修改sql语句重新进行SQL检测&#xff0c;如检测失败可以进行SQL美化后…...

JAVA接口代码示例

public class VehicleExample {// 定义接口public interface Vehicle {void start(); // 启动车辆void stop(); // 停止车辆void status();// 检查车辆状态}public interface InnerVehicleExample {void student();}// 实现接口的类&#xff1a;Carpublic static class Car imp…...

【Android】Proxyman 抓 HTTP 数据包

前言 抓包&#xff08;Packet Capture&#xff09;是指在网络通信中截取、分析数据包的过程。 抓包通常用于网络调试、性能优化、安全分析等工作&#xff0c;可以帮助开发者或运维人员查看网络请求的详细内容&#xff0c;包括请求的URL、请求头、响应状态、数据内容等信息。 …...