开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 213|回复: 6
打印 上一主题 下一主题
收起左侧

[Web相关] 精易WEB浏览器运行JS代码问题。

[复制链接]
结帖率:0% (0/1)
跳转到指定楼层
楼主
发表于 2025-6-16 19:48:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   重庆市重庆市
5精币
我用浏览器的控制台运行JS,比如:document.querySelector('#txtName').value='123',能看到相应项目被修改了。但是使用精易WEB浏览器运行这段代码就不行?
.版本 2
.支持库 wke
.支持库 spec

.子程序 _按钮_JS执行_被单击
.局部变量 es, 整数型
.局部变量 vl, 长整数型

es = JS.取JS执行状态 (精易Web浏览器1.取WebView ())
vl = JS.运行JS_值对象 (精易Web浏览器1.取WebView (), “document.querySelector('#txtName').value='123'”)
调试输出 (JS.取执行结果到文本 (es, vl))


我不知道是不是框架的问题?(在该界面下有很多个input,但是通过cha询元素都不能cha询到。不知道问题出在哪里?)
我在另一个页面运行相似的代码就可以运行。





回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:100% (106/106)

签到天数: 5 天

沙发
发表于 2025-6-16 20:00:49 | 只看该作者   浙江省温州市
es =JS.取JS执行状态 (精易Web浏览器1.取WebView ())
表达式 = “document.querySelector('#txtName').value='123'”
值对象 = js.计算表达式_值对象 (es, 表达式)
调试输出 (js.取执行结果到文本 (es, 值对象))

点评

表达式 = “return document.querySelector('#txtName').value='123'”   浙江省温州市  发表于 2025-6-16 20:04
回复

使用道具 举报

结帖率:0% (0/1)
板凳
 楼主| 发表于 2025-6-17 21:12:39 | 只看该作者   重庆市重庆市
熬夜 发表于 2025-6-16 20:00
es =JS.取JS执行状态 (精易Web浏览器1.取WebView ())
表达式 = “document.querySelector('#txtName').va ...

我在前面加了return 也不行。感觉他不能cha询到这个('#txtName')input
回复

使用道具 举报

结帖率:57% (12/21)

签到天数: 2 天

地板
发表于 2025-6-18 00:09:51 | 只看该作者   浙江省湖州市
### 精易WEB浏览器JS执行问题分析

你遇到的问题是精易WEB浏览器(wke引擎)与浏览器控制台执行JS的差异,这是一个常见的自动化操作难题。我来分析可能的原因和解决方案:


### 问题原因分析

1. **iframe/框架嵌套问题**:
   - 如果目标元素位于iframe中,需要先切换到对应的iframe上下文
   - 浏览器控制台默认在顶层窗口,而精易Web浏览器需要显式指定iframe

2. **页面加载状态问题**:
   - 代码执行时页面可能尚未完全加载
   - 精易Web浏览器的加载状态判断与标准浏览器不同

3. **JS执行上下文问题**:
   - wke引擎的JS执行环境可能与标准浏览器存在差异
   - 部分DOM API可能不被完全支持或实现方式不同

4. **选择器匹配问题**:
   - 元素ID可能不唯一或动态生成
   - 页面可能使用Shadow DOM等特殊结构


### 解决方案

#### 1. 确保页面完全加载

```易语言
.版本 2
.支持库 wke
.支持库 spec

.子程序 _按钮_JS执行_被单击
.局部变量 等待时间, 整数型
.局部变量 es, 整数型
.局部变量 vl, 长整数型

    // 等待页面加载完成
    等待时间 = 0
    循环判断 (等待时间 < 10000)  // 最多等待10秒
        如果 (精易Web浏览器1.取加载状态 () = #WKE_LOAD_STATE_COMPLETED)
            跳出循环
        结束
        延时 (100)
        等待时间 = 等待时间 + 100
    结束
   
    // 执行JS
    es = JS.取JS执行状态 (精易Web浏览器1.取WebView ())
    vl = JS.运行JS_值对象 (精易Web浏览器1.取WebView (), "document.querySelector('#txtName').value='123'")
    调试输出 (JS.取执行结果到文本 (es, vl))
.子程序尾
```

#### 2. 处理iframe嵌套

```易语言
.版本 2
.支持库 wke
.支持库 spec

.子程序 执行JS_带iframe支持, 逻辑型
.参数 js代码, 文本型
.参数 iframeSelector, 文本型, 可空
.局部变量 es, 整数型
.局部变量 vl, 长整数型
.局部变量 iframeCount, 整数型
.局部变量 i, 整数型
.局部变量 iframe, 整数型
.局部变量 执行结果, 文本型

    es = JS.取JS执行状态 (精易Web浏览器1.取WebView ())
   
    如果 (iframeSelector = "")
        // 直接在主文档执行
        vl = JS.运行JS_值对象 (精易Web浏览器1.取WebView (), js代码)
    否则
        // 先查找iframe
        iframeCount = 精易Web浏览器1.取框架数量 ()
        
        循环 (i = 0; i < iframeCount; i + 1)
            iframe = 精易Web浏览器1.取框架 (i)
            
            // 检查iframe是否匹配选择器
            vl = JS.运行JS_值对象 (iframe, "document.querySelector('" + iframeSelector + "') !== null")
            执行结果 = JS.取执行结果到文本 (es, vl)
            
            如果 (执行结果 = "true")
                // 在匹配的iframe中执行JS
                vl = JS.运行JS_值对象 (iframe, js代码)
                返回 (真)
            结束
        结束
        
        调试输出 ("未找到匹配的iframe")
        返回 (假)
    结束
   
    调试输出 (JS.取执行结果到文本 (es, vl))
    返回 (真)
.子程序尾

.子程序 _按钮_JS执行_被单击
    执行JS_带iframe支持 ("document.querySelector('#txtName').value='123'", "")
.子程序尾
```

#### 3. 使用更健壮的选择器

```易语言
.版本 2
.支持库 wke
.支持库 spec

.子程序 执行JS_健壮选择器, 逻辑型
.参数 js代码, 文本型
.局部变量 es, 整数型
.局部变量 vl, 长整数型
.局部变量 尝试次数, 整数型
.局部变量 执行结果, 文本型

    es = JS.取JS执行状态 (精易Web浏览器1.取WebView ())
    尝试次数 = 0
   
    // 尝试多次,确保元素存在
    循环判断 (尝试次数 < 5)
        // 先检查元素是否存在
        vl = JS.运行JS_值对象 (精易Web浏览器1.取WebView (), "document.querySelector('#txtName') !== null")
        执行结果 = JS.取执行结果到文本 (es, vl)
        
        如果 (执行结果 = "true")
            // 元素存在,执行JS
            vl = JS.运行JS_值对象 (精易Web浏览器1.取WebView (), js代码)
            调试输出 (JS.取执行结果到文本 (es, vl))
            返回 (真)
        结束
        
        延时 (500)
        尝试次数 = 尝试次数 + 1
    结束
   
    调试输出 ("元素未找到或加载超时")
    返回 (假)
.子程序尾

.子程序 _按钮_JS执行_被单击
    执行JS_健壮选择器 ("document.querySelector('#txtName').value='123'")
.子程序尾
```

#### 4. 替代方案:使用模拟输入

```易语言
.版本 2
.支持库 wke
.支持库 spec

.子程序 模拟输入文本, 逻辑型
.参数 元素选择器, 文本型
.参数 输入文本, 文本型
.局部变量 es, 整数型
.局部变量 vl, 长整数型
.局部变量 元素, 整数型

    es = JS.取JS执行状态 (精易Web浏览器1.取WebView ())
   
    // 查找元素
    vl = JS.运行JS_值对象 (精易Web浏览器1.取WebView (), "document.querySelector('" + 元素选择器 + "')")
    元素 = JS.取执行结果到整数 (es, vl)
   
    如果 (元素 = 0)
        调试输出 ("元素未找到")
        返回 (假)
    结束
   
    // 聚焦元素
    JS.运行JS_值对象 (精易Web浏览器1.取WebView (), "document.querySelector('" + 元素选择器 + "').focus()")
    延时 (100)
   
    // 模拟按键输入
    发送按键 (取键代码 (输入文本))
   
    返回 (真)
.子程序尾

.子程序 _按钮_模拟输入_被单击
    模拟输入文本 ("#txtName", "123")
.子程序尾
```


### 调试建议

1. 在精易Web浏览器中执行简单的JS测试:
   ```javascript
   document.title = "测试成功";
   alert("Hello from wke");
   ```

2. 使用`console.log`在页面中输出调试信息:
   ```javascript
   var element = document.querySelector('#txtName');
   console.log('元素是否存在:', element !== null);
   if (element) {
     console.log('元素类型:', element.tagName);
     element.value = '123';
   }
   ```

3. 在精易Web浏览器中启用开发者工具:
   ```易语言
   精易Web浏览器1.启用调试模式 (真)
   ```

4. 使用更具体的选择器,例如:
   ```javascript
   document.querySelector('input[name="txtName"]').value = '123';
   ```


### 总结

通过以上方法,你应该能够解决精易Web浏览器中JS执行失败的问题。关键是要考虑iframe嵌套、页面加载状态、元素存在性检查等因素。如果仍然有问题,可能需要进一步分析目标页面的具体结构和特性。
回复

使用道具 举报

结帖率:0% (0/1)
地下
 楼主| 发表于 2025-6-22 19:30:17 | 只看该作者   重庆市重庆市
appleqc 发表于 2025-6-18 00:09
### 精易WEB浏览器JS执行问题分析

你遇到的问题是精易WEB浏览器(wke引擎)与浏览器控制台执行JS的差异,这 ...

谢谢你  写了这么多。
我发现原因了,是frameset框架问题,查看源代码-根本不能发现源代码。提示浏览器不能加载该框架。我找到了内层框架的网址,登陆后,再登陆内层框架的网址发现可以运行,并可以填表,暂时可以解决。
回复

使用道具 举报

6
发表于 7 天前 | 只看该作者   湖北省黄冈市
太复杂了,学不会啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表