【问题标题】:Specific xpath is not working in puppeteer js特定的 xpath 在 puppeteer js 中不起作用
【发布时间】:2020-06-12 20:31:36
【问题描述】:

我有一个不工作的特定 xpath。我正在等待 XPath 出现,但由于某种原因我仍然无法得到它。

这里是 xpath: 我正在使用:'//*[@id="settings"]/div[6]/div[2]/div[2]/div/div[3]/div/form/div[4]/div/div[2]/button[contains(text(), "Save")]'

为了确认此 xpath 在页面中,我转到控制台并对其进行评估。

$x('//*[@id="settings"]/div[6]/div[2]/div[2]/div/div[3]/div/form/div[4]/div/div[2]/button[contains(text(), "Save")]')

然后我明白了:

[button.ml3-sm.mb1-sm.css-17hmqcn.ex41m6f0.primary]
0: button.ml3-sm.mb1-sm.css-17hmqcn.ex41m6f0.primary

我的代码如下:

  await page.waitForXPath('//*[@id="settings"]/div[6]/div[2]/div[2]/div/div[3]/div/form/div[4]/div/div[2]/button[contains(text(), "Save")]');
  const [setting] = await page.$x('//*[@id="settings"]/div[6]/div[2]/div[2]/div/div[3]/div/form/div[4]/div/div[2]/button[contains(text(), "Save")]');
  if(setting) setting.click();

我等待元素。我可以在页面上直观地看到它,并且就像我上面提到的那样,我可以评估它,但点击永远不会触发。
我也试过这个:

setting[0].click().

知道我错过了什么吗?

【问题讨论】:

  • 当您有文本输出时,don't take a picture but copy paste the output in your POST 也可以从浏览器控制台中复制 html:从检查器中,右键单击 -> 复制为 outerHTML。
  • 固定@GillesQuenot
  • 如果您尝试与之交互的是公共网页,您可以分享它的网址吗?我只是看到您在使用这个特定元素时遇到了困难。我确信那里有解决方案;)

标签: puppeteer


【解决方案1】:

我想您的选择器不错,尤其是如果您能够通过 Chrome DevTools 控制台对其进行验证。

我想你只需要await点击:

if(setting) await setting.click();

OR(不解构使用[0] 上的第一个索引)

await setting[0].click();

【讨论】:

    猜你喜欢
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多