记录一个WebView2动态运行JS脚本的问题

B站影视 韩国电影 2025-04-08 12:42 2

摘要:一个项目需要用到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对这种代码注入是如何管理这些代码的,我不知道源码啥样,但绝对是跟我预想的不一样。我以为每次注入的代码都是临时的,执行完毕就丢掉了,多次运行的代码互不影响,但事实上不是。

这个问题花了我几个小时去调试,我甚至一度怀疑我的解决问题思路有问题。还好,最后还是解决掉了。其实绝大多数事情都不是一帆风顺的,总归会遇到这样那样的困难,面对困难的时候,积极应对,寻求各种解决方案,没有条件创造条件。当你觉得很难的时候就再多坚持一下,也许不定某个时刻,突然那么一下子灵感迸发,就找到了原因。

每天一点小进步,继续加油!

来源:自由践行

相关推荐