当我尝试按名称获取输入时,“错误:节点不可单击或不是 HTMLElement”Puppeteer

Jag*_*web 3 javascript selenium node.js node-red puppeteer

这是我的 HTML 结构:

<div id="divImporte">
  <p class="btn01">
    <input type="button" name="Enviar Tasas" value="Enviar Tasas">
  </p>
</div>
Run Code Online (Sandbox Code Playgroud)

这就是我尝试选择输入的方式:

第一种方式:

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

第二种方式:

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

然后点击它:

if (buttonTasas && buttonTasas.length > 0) {
  await buttonTasas[0].click();
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

"Error: Node is either not clickable or not an HTMLElement"
Run Code Online (Sandbox Code Playgroud)

我该如何解决?谢谢

lez*_*ain 6

有时puppeteer只是由于某种原因无法单击,因此在仔细检查该值buttonTasas不为空并尝试在调用该方法之前添加一些延迟后click(),您可以尝试以下解决方法直接在页面中调用单击函数:

使用page.evaluatehttps://pptr.dev/api/puppeteer.page.evaluate):

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

或者你可以直接使用该元素:

page.evaluate((btn) => {
    // this executes in the page
    btn.click();
}, buttonTasas);
Run Code Online (Sandbox Code Playgroud)

使用page.$evalhttps://pptr.dev/api/puppeteer.page._eval):

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