Puppeteer (1.14.0) не может найти тег привязки по «id», хотя JQuery может найти его - PullRequest
0 голосов
/ 12 апреля 2019

Узел v10.15.3 (64-битный) Кукловод v1.14.0 Chromium v ​​75.0.3738.0 (Developer Build) (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 голосов
/ 12 апреля 2019

Дело не в том, что Кукловод не может получить элемент. Это подтверждение от Кукловода (см. https://github.com/GoogleChrome/puppeteer/blob/5ee21d97e796263857b9f3fbeaf63366179d346f/lib/JSHandle.js#L203).

Согласно документу:

Этот метод выбирает элемент с селектором, прокручивает его, если необходимо, и затем использует page.mouse, чтобы щелкнуть в центре элемента. Если селектор, соответствующий элементу, отсутствует, метод выдает ошибку.

Это означает, что Chromium должен иметь возможность прокрутки до этого элемента, и этот элемент должен быть видимым, чтобы можно было щелкнуть по нему.

...