摘要:一个项目需要用到WebView2动态运行JS脚本做自动化操作,比如找到带有下一页的button按钮,自动点击。
一个项目需要用到WebView2动态运行JS脚本做自动化操作,比如找到带有下一页的button按钮,自动点击。
从大模型上复制的代码:
// 获取所有按钮元素const buttons = document.querySelectorAll('button');// 查找包含“下一页”的按钮(第一个匹配项)const nextPageButton = Array.from(buttons).find(button => button.textContent.includes('下一页'));第一页没问题,第二页就不触发了,真是奇了怪了。
由于是在WebView中动态执行的,也没办法加断点调试,就是只能一步一步通过alert输出找原因。
发现
const buttons = document.querySelectorAll('button');alert(buttons);这样写也一样,第一次正常,第二次没反应,继续奇怪。
换成这样:
alert(document);第一次、第二次都能正常触发。继续加变换:
alert(document.querySelectorAll('button'));竟然也没问题,你说奇怪不奇怪?那为什么
就不行呢?既然const不行,那我换成var试试,于是:
var buttons = document.querySelectorAll('button');alert(buttons);OK,没问题。那原因就找到了,也就是 const 与 var 的处理方式是不同的。再次询问大模型
我看到const声明是禁止重复声明和重新赋值的,可能是因为这个特性导致第二次没办法正常运行。
具体webview中的ExecuteScriptAsync对这种代码注入是如何管理这些代码的,我不知道源码啥样,但绝对是跟我预想的不一样。我以为每次注入的代码都是临时的,执行完毕就丢掉了,多次运行的代码互不影响,但事实上不是。
这个问题花了我几个小时去调试,我甚至一度怀疑我的解决问题思路有问题。还好,最后还是解决掉了。其实绝大多数事情都不是一帆风顺的,总归会遇到这样那样的困难,面对困难的时候,积极应对,寻求各种解决方案,没有条件创造条件。当你觉得很难的时候就再多坚持一下,也许不定某个时刻,突然那么一下子灵感迸发,就找到了原因。
每天一点小进步,继续加油!
来源:自由践行
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!