Puppeteer(1.14.0)无法通过“ id”找到锚标记,尽管JQuery可以找到它

时间:2019-04-12 13:37:31

标签: selector puppeteer

节点v10.15.3(64位) up人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是在看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="{&quot;actiontype&quot;:&quot;ACTION&quot;,&quot;value&quot;:&quot;Click&quot;}" >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="{&quot;actiontype&quot;:&quot;ACTION&quot;,&quot;value&quot;:&quot;Click&quot;}" >Post</a>

</span>
        </div>
    </div>

1 个答案:

答案 0 :(得分:0)

不是Puppeteer无法获得该元素。这是来自Puppeteer的验证(请参见https://github.com/GoogleChrome/puppeteer/blob/5ee21d97e796263857b9f3fbeaf63366179d346f/lib/JSHandle.js#L203)。

根据文档:

  

此方法使用选择器获取一个元素,如果需要,将其滚动到视图中,然后使用page.mouse单击该元素的中心。如果没有元素匹配选择器,则该方法将引发错误。

这意味着Chromium应该能够滚动到该元素,并且该元素应该是可见的以便能够单击它。