【发布时间】:2019-04-12 23:42:20
【问题描述】:
节点 v10.15.3(64 位) 木偶师 v1.14.0 Chromium v 75.0.3738.0(开发者构建)(64 位)
我在站点自动化工具的最后一页,Puppeteer 找不到我需要按下的最后一个按钮(实际上是一个带有“id”属性的锚标记)。代码是:
await page2.click('#____bs');
我收到的错误是:
错误:节点不可见或不是 HTMLElement
HTML 代码在这里:
<a role="button" ct="Button" rel="tooltip" title="Post"
aria-label="Please Select Post" data-toggle="cso-button" id="____bq"
class="cso-btn cso-btn cso-action cso-corner cso-btn-primary "
href="javascript:void(0)"
data-ctl-options="{'actiontype';:'ACTION','value':'Click'}"
style="display: inline-block;">Post</a>
当页面处于调试模式时,我可以使用 JQuery 轻松找到元素:
$("#____bq").text()
"Post"
那么,为什么Puppeteer 找不到呢?有没有其他方法可以尝试点击此链接?
是否也可能是控件(锚点)位于屏幕的可见边缘之外?我认为这并不重要,因为我假设 Puppeteer 正在查看 HTML 而不是屏幕本身,但问一下也无妨。
提前致谢。
更新:这是包含我要选择的锚点的整个 HTML:
<div class="row split">
<div class="clsFP-expand clsBG-expand cso-hidden cso-cont-50r cso-pad5r">
<span class="cso-pad5-ie">
<a role="button" ct="Button" rel="tooltip" title="Cancel" aria-label="Please Select Cancel" data-toggle="cso-button" id="____bo" class="cso-btn cso-btn cso-action cso-corner cso-btn-grey " href="javascript:void(0)" data-ctl-options="{"actiontype":"ACTION","value":"Click"}" >Cancel</a>
</span>
<span class="cso-pad5-ie">
<a role="button" ct="Button" rel="tooltip" title="Post" aria-label="Please Select Post" data-toggle="cso-button" id="____bs" class="cso-btn cso-btn cso-action cso-corner cso-btn-primary inactive " href="javascript:void(0)" data-ctl-options="" >Post</a>
<a role="button" ct="Button" rel="tooltip" title="Post" aria-label="Please Select Post" data-toggle="cso-button" id="____bq" class="cso-btn cso-btn cso-action cso-corner cso-btn-primary " href="javascript:void(0)" data-ctl-options="{"actiontype":"ACTION","value":"Click"}" >Post</a>
</span>
</div>
</div>
【问题讨论】:
-
您的 Puppeteer 代码引用 id 为
___bs,而您的页面包含 id 为___bq。哪个是正确的? -
好收获。奇怪的是,这个页面有两个用于“发布”“按钮”的锚标签,一个是“____bq”,另一个是“____bs”。这是第三方软件,所以我不确定有什么区别。在任何事件,当我在 Chrome 中并使用按钮上的“复制选择器”时,它是“____bq”。很抱歉造成混淆。