最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - "Error: Node is either not clickable or not an HTMLElement" Puppeteer when i tried to get input b

programmeradmin2浏览0评论

This is my HTML structure:

<div id="divImporte">
  <p class="btn01">
    <input type="button" name="Enviar Tasas" value="Enviar Tasas">
  </p>
</div>

And this is the ways how i try to select the input:

first way:

const buttonTasas = await page.$$("input[type='button'][value='Enviar Tasas']");

second way:

const buttonTasas = await page.waitForSelector("input[type='button'][value='Enviar Tasas']");

and then click it:

if (buttonTasas && buttonTasas.length > 0) {
  await buttonTasas[0].click();
}

i got this error:

"Error: Node is either not clickable or not an HTMLElement"

How can i solve? thanks

This is my HTML structure:

<div id="divImporte">
  <p class="btn01">
    <input type="button" name="Enviar Tasas" value="Enviar Tasas">
  </p>
</div>

And this is the ways how i try to select the input:

first way:

const buttonTasas = await page.$$("input[type='button'][value='Enviar Tasas']");

second way:

const buttonTasas = await page.waitForSelector("input[type='button'][value='Enviar Tasas']");

and then click it:

if (buttonTasas && buttonTasas.length > 0) {
  await buttonTasas[0].click();
}

i got this error:

"Error: Node is either not clickable or not an HTMLElement"

How can i solve? thanks

Share Improve this question asked Jan 28, 2022 at 11:07 JagcwebJagcweb 1121 silver badge9 bronze badges 2
  • 1 Be careful as your "1st way" returns an array whereas 2nd way doesn't, otherwise this looks correct. try adding {visible: true} as a 2nd parameter of waitForSelector to be sure it waits for the element to be visible, and try adding some small delay before clicking the element with await page.waitForTimeout(1000) just to make sure the element is loaded – lezhumain Commented Jan 28, 2022 at 11:59
  • Hi @lezhumain i tried to use timeout and {visible: true} as second param but i got the same error. When i use node.warn into buttonTasas i got this: JSHandle@node – Jagcweb Commented Jan 28, 2022 at 12:12
Add a ment  | 

2 Answers 2

Reset to default 6

Sometimes puppeteer just fails to click for some reason, so after double checking that buttonTasas is not null and trying to add some delay just before calling the click() method, you can try the following workaround to call the click function directly in the page:

With page.evaluate (https://pptr.dev/api/puppeteer.page.evaluate):

page.evaluate((btnSelector) => {
    // this executes in the page
    document.querySelector(btnSelector).click();
}, "input[type='button'][value='Enviar Tasas']");

or maybe can you use the element directly:

page.evaluate((btn) => {
    // this executes in the page
    btn.click();
}, buttonTasas);

With page.$eval (https://pptr.dev/api/puppeteer.page._eval):

await page.$eval(
  'input[type='button'][value='Enviar Tasas']',
  (el) => {
    el.click()
  }
);

UI tools for browsers usually have issues with white spaces. Try to search an element using an expression without any spaces or new lines. You can find a word inside a string using *= in CSS expressions:

await page.$$("input[type='button'][value*='Enviar']");

or

await page.$$("input[type='button'][value*='Enviar'][value*='Tasas']");

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论