嘿!距离上次登录已经有一段时间了。
最近,我一直在解决与在循环中丢失元素引用相关的问题,我终于找到了一个解决方案,我想与大家分享。
这是初始代码的简化版本:
const someElements = await page.$$("xpath/ .//foo[@name='hoge']"); for (let i=0; i < someElements.length; i++) { await Promise.all([ someElements[i].click(), page.waitForNavigation({ waitUntil: ["load", 'networkidle0'] }), /* There are particular processes and going back process */ ]); };
forst 循环迭代后,脚本无法找到按钮元素。我不断收到以下错误:
ProtocolError:协议错误 (DOM.describeNode):无法在
我通过在循环中重新声明按钮元素列表解决了这个问题。
这是修改后的代码:
const someElements1 = await page.$$("xpath/ .//foo[@name='hoge']"); for (let i=0; i < someElements.length; i++) { const someElements2 = await page.$$("xpath/ .//foo[@name='hoge']"); // added row await Promise.all([ someElements2[i].click(), page.waitForNavigation({ waitUntil: ["load", 'networkidle0'] }), /* There are particular processes and going back process */ ]); };
我添加了重新声明行,因为我假设原始的 someElements 引用在离开初始页面时丢失了。经过此更改后,错误得到解决。但是,我不确定这种方法是否严格遵守最佳编码实践。
如果在页面之间导航时遇到循环中的 .click() 问题,请考虑在循环本身内重新声明该元素。这个简单的更改可能会为您节省大量故障排除时间!
以上是代码日的详细内容。更多信息请关注PHP中文网其他相关文章!