首页
Search
1
v2ray异常错误之二
3,310 阅读
2
linux时区设置
2,698 阅读
3
DB2常用操作
2,173 阅读
4
websphere修改jvm内存xmx和xms
1,929 阅读
5
nfs客户端文件属主为nobody的现象
1,552 阅读
技术
生活
运动
游戏
电影
登录
Search
标签搜索
docker
linux
troubleshooting
nginx
secure
truenas
mysql
windows
python
esxi
docker swarm
oracle
zabbix
tomcat
blog
dsm
群晖
rpa
freenas
db
yuc
累计撰写
291
篇文章
累计收到
0
条评论
首页
栏目
技术
生活
运动
游戏
电影
页面
搜索到
289
篇与
的结果
2024-05-27
tagui之click功能在Linux下无效的问题
问题 这个问题与之前的 select功能无法正常使用类似,表现为在 linux 下,特别是在 iframe 中交互元素的时候,经常无法正常点击到元素。 以前猜测过是系统某些软件或者服务依赖存在问题导致的,但是在长大几个月的使用 tagui 中发现,只安装了 tagui 的 centos、ubuntu 同样存在此问题。 原因 直到现在仍然没有排查到原因,对 tagui 的整个代码和执行逻辑还没有太了解。但是通过查看成功与不成功的场景,发现 tagui_chrome.log 中的日志有一些的区别,并且验证了在多个不同 centos、ubuntu 中可能存在同样的问题 排查过程 click成功的日志输出: [tagui] INPUT - [7] {"id":7,"method":"Runtime.evaluate","params":{"expression":"document.evaluate('(//frame|//iframe)[@name=\"MFrame\" or @id=\"MFrame\"]',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotLength"}} [tagui] OUTPUT - [7] {"id":7,"result":{"result":{"type":"number","value":1,"description":"1"}}} [tagui] INPUT - [8] {"id":8,"method":"Runtime.evaluate","params":{"expression":"var result_bounds = document.evaluate('(//frame|//iframe)[@name=\"MFrame\" or @id=\"MFrame\"]',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(0).getBoundingClientRect(); var result_rect = {top: Math.round(result_bounds.top), left: Math.round(result_bounds.left), width: Math.round(result_bounds.width), height: Math.round(result_bounds.height)}; result_rect","returnByValue":true}} [tagui] OUTPUT - [8] {"id":8,"result":{"result":{"type":"object","value":{"top":110,"left":240,"width":1080,"height":601}}}} [tagui] INPUT - [9] {"id":9,"method":"Runtime.evaluate","params":{"expression":"mainframe_context = document.evaluate('(//frame|//iframe)[@name=\"MFrame\" or @id=\"MFrame\"]',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(0).contentDocument"}} [tagui] OUTPUT - [9] {"id":9,"result":{"result":{"type":"object","subtype":"node","className":"HTMLDocument","description":"#document","objectId":"-211116244302657272.5.1"}}} [tagui] INPUT - [10] {"id":10,"method":"Runtime.evaluate","params":{"expression":"(function (dom_json) {document.querySelector('iframe').contentWindow.dlClick.call(document.querySelector('iframe').contentDocument.querySelectorAll('.tdlist > div')[0]);})({})"}} [tagui] OUTPUT - [10] {"id":10,"result":{"result":{"type":"undefined"}}} click 不成功的日志输出 [tagui] INPUT - [66] {"id":66,"method":"Runtime.evaluate","params":{"expression":"document.evaluate('(//frame|//iframe)[@name=\"MFrame\" or @id=\"MFrame\"]',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotLength"}} [tagui] OUTPUT - [66] {"id":66,"result":{"result":{"type":"number","value":1,"description":"1"}}} [tagui] INPUT - [67] {"id":67,"method":"Runtime.evaluate","params":{"expression":"var result_bounds = document.evaluate('(//frame|//iframe)[@name=\"MFrame\" or @id=\"MFrame\"]',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(0).getBoundingClientRect(); var result_rect = {top: Math.round(result_bounds.top), left: Math.round(result_bounds.left), width: Math.round(result_bounds.width), height: Math.round(result_bounds.height)}; result_rect","returnByValue":true}} [tagui] OUTPUT - [67] {"id":67,"result":{"result":{"type":"object","value":{"top":110,"left":240,"width":1080,"height":601}}}} [tagui] INPUT - [68] {"id":68,"method":"Runtime.evaluate","params":{"expression":"mainframe_context = document.evaluate('(//frame|//iframe)[@name=\"MFrame\" or @id=\"MFrame\"]',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(0).contentDocument"}} [tagui] OUTPUT - [68] {"id":68,"result":{"result":{"type":"object","subtype":"node","className":"HTMLDocument","description":"#document","objectId":"6526965194935895727.5.2"}}} 通过日志最后几行可以看到,click不成功的时候最后在定位到 元素 后根本没有输出点击这个元素的日志。这个到底是什么原因我们排查手段有限,也许在后续有时间更加熟悉 tagui 代码后能够帮助它排查出来,但是现在我们不得而知。 这个现象与其他 click 或者 select 点击不了有很大的类似,也有一些不同。目前观察到的问题,只要在linux下无法click或者select元素,那么基本上都是通过坐标来定位的。有时候是坐标点击出现了误差,有些(这次)是根本没有执行代码。 所以我们解决的办法是通过 js 来操作,目前经过了这多次测试验证,基本上只要通过了控制台执行,那么 rpa 的 js 调用也可以成功。 但是 js 执行对于我们来说比较复杂,因为有时候浏览器本身提供的功能无法满足,还需要查看网站是否提供了内部的方法,比如下面这个 r.dom(f"document.querySelector('iframe').contentWindow.dlClick.call(document.querySelector('iframe').contentDocument.querySelectorAll('.tdlist > div')[{x}-1])") 这里主要是想双击iframe内的元素,实测进入 iframe 后通过 dclick 不稳定,经常有很多案件进入不了,所以这里一整行都是为了 双击 进入某个案件。 前面一部分是定位到此 iframe ,中间一部分是调用此 iframe 中的 dlClick.call 方法,这是站点提供的双击方法,在 top 中不存在,所以需要第一部分定位到 iframe 中,接着我们在这个方法内还需要定位到此元素,又需要从 top 开始找,所以第一部分 定位 iframe 的代码仍然需要,最后一部分就是定位元素具体的代码,这个了解即可 PS. 方案汇总 后续一些场景下 click 点击不到的解决方案汇总: 123xx 环境点击案件详细页面的关闭按钮无效 r.frame() r.dom('MFrame.contentWindow.document.querySelector("#btnBack").click()') # 其中 MFrame 是元素所在的 iframe 名,当然在点击之前需要回到此 iframe 的上层
2024年05月27日
10 阅读
0 评论
0 点赞
2024-05-21
python3.10的安装
安装问题 python3.10 要求 openssl1.1 ,所以一般源码正常安装完后,也是有部分功能异常的,比如 requests,urllib,以及 pip 安装模块,基本上都是提示 ssl 存在问题,例如 pip 是如下错误: Could not fetch URL https://pypi.org/simple/xxx/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/xxx/ (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:997)'))) - skipping 如何解决 解决这个问题查询了很多资料,中途还有设置很多的环境变量之类,最后这里使用一个最简单的安装办法来解决这个问题: 准备操作系统,不符合 openssl1.1 的需求 准备 openssl1.1 的最新包,在 openssl 官方网站下载,20240520 首页最新最低只有3.0了,所以从归档下载吧 安装 openssl ,如下步骤 #./config --prefix=/usr/local/openssl ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl -Wl,-rpath,/usr/local/openssl/lib shared zlib make && make install 把 openssl 库文件加载到系统中 echo "/usr/local/openssl/lib/" >> /etc/ld.so.conf.d/ssl.conf && ldconfig -pv ldconfig 然后可以通过 ldconfig -pv | grep ssl 查看到是否存在 ssl1.1 的版本 5. 安装 python3.10 ./configure --prefix=/usr/local/python3.10 --with-openssl=/usr/local/openssl make && make install 通过这样安装之后,基本上在后续的使用都不会存在ssl的问题 错误之一 20240525 python3错误一,在安装完成后导入某些模块仍然可能报如下错误: ModuleNotFoundError: No module named '_ctypes' 这是因为系统依赖不完整导致,一般使用 centos 不会出现这个问题,而 ubuntu 等出现的概率较大 需要安装以下依赖,然后重新编译安装 python3 # centos yum install libffi-devel -y # ubuntu sudo apt-get install libffi-dev
2024年05月21日
17 阅读
0 评论
0 点赞
2024-05-07
centos内核版本升级
参考文档 http://elrepo.org/tiki/tiki-index.php?utm_source=hacpai.com 操作步骤 yum -y install yum-plugin-fastestmirror && \ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org && \ yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm && \ yum --enablerepo=elrepo-kernel install kernel-ml centos7查看当前可以使用的内核 awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg 查看当前使用的内核版本 uname -r 或 uname -a 一般可以看到最新安装的内核是排在第一位的,并且第一个的编号为0开始,要想切换到则使用命令: grub2-set-default 0 因为grub2的配置文件 /etc/default/grub 中默认配合的应该是 GRUB_DEFAULT=saved,意思是说根据设置来选择启动项 或者可以修改配置文件 GRUB_DEFAULT=0 意思是第0个,也就是最新的 PS. centos6目前最多只能升级到4.4,centos7,8可以升级到更高的内核版本,后续需要更换为centos7,采用较新的内核ml主线版本 内核升级,如果没有升级到最新版,可能是因为yum源里面有的地址没有同步最新版,而本地升级的时候解析到这个仓库去了 yum --enablerepo=elrepo-kernel install kernel-lt 升级后修改/boot/grub/grub.conf,一般新内核顺序为0 查询目前有几个版本内核 egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \' 设置默认的启动内核 grub2-set-default 'CentOS Linux (5.4.262-1.el7.elrepo.x86_64) 7 (Core)' 查询是否生效 grub2-editenv list
2024年05月07日
6 阅读
0 评论
0 点赞
2024-05-07
本地ntpd时间服务器配置
服务端配置 修改配置文件 ntp.conf server time3.aliyun.com perfer server time1.aliyun.com server 127.127.1.0 fudge 127.127.1.0 stratum 1 driftfile /var/lib/ntp/drift restrict 127.0.0.1 restrict default nomodify notrap nopeer
2024年05月07日
5 阅读
0 评论
0 点赞
2024-05-07
oracle坏快ORA-01578: ORACLE data block corrupted
问题现象 使用expdp导出时候发现这个错误,查看日志提示 SYSMAN.MGMT_METRICS_RAW 表数据文件有问题 排查诊断 于是通过以下语句查询对应的段:2为报错的文件id,65675为报错的块编号 SELECT SEGMENT_TYPE,OWNER||'.'||SEGMENT_NAME FROM DBA_EXTENTS WHERE file_id = 2 AND 65675 BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS -1 或者通过这个语句来手动输入文件id 和 块编号 SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents WHERE file_id = &fileid and &blockid between block_id AND block_id + blocks - 1 发现是此表的索引数据有问题,也可以查出来是哪个schema,查询出来有可能是segment_name段名 根据段名查询相关的信息,可能是表,这里是索引 select * from dba_segments where SEGMENT_NAME='SYS_C0091703' 根据schema和segment_name类型查询相关的信息,查出来是哪个表的索引 SELECT seg.owner as Schema, seg.segment_name as Index_Name , cons.table_name, cons.CONSTRAINT_TYPE, seg.bytes/1024/1024 as size_in_MB FROM dba_segments seg left join dba_constraints cons on seg.segment_name = cons.CONSTRAINT_NAME WHERE seg.owner = 'xxx100' AND segment_type = 'INDEX' ORDER BY bytes desc 尝试重建索引解决问题 alter index xx100.SYS_C0091703 rebuild # 发现需要增加 online 参数 alter index xx100.SYS_C0091703 rebuild online 通过 vdb 命令进行验证数据文件,发现确实有问题 尝试重建此索引 alter index SYSMAN.MGMT_METRICS_RAW_PK, # 提示 Primary index on an IOT cannot be rebuilt 尝试跳过坏块 exec dbms_repair.skip_corrupt_blocks 跳过坏块 过程中仍然提示 ORA-24123: feature IOT support is not yet implemented 最后解决方案:通过移动到新表空间解决 alter table SYSMAN.MGMT_METRICS_RAW move tablespace users; (新表空间) alter table SYSMAN.MGMT_METRICS_RAW move tablespace SYSAUX; (原表空间) 查询已经捕获的坏块 select * from v$database_block_corruption 再次使用命令验证dbf文件 dbv file=/opt/app/oracle/oradata/orcl/users07.dbf
2024年05月07日
4 阅读
0 评论
0 点赞
1
...
15
16
17
...
58