【问题标题】:Get elements inside #document using PUPPEETER使用 PUPPETEER 获取 #document 中的元素
【发布时间】:2021-05-26 07:19:00
【问题描述】:

我是新来的,所以你能帮帮我吗!?

我需要使用 puppetter 在虚拟引用 #document html 中获取一些元素,但是当我尝试收到一条消息时,它元素不存在。

以下示例:

HTML

<div class="row" id="mainDiv">
    <iframe id="mainFrame" src="...">        
           #document
                <html>
                    <head></head>
                    <body>
                        <div id="firstDIV">
                            <div id="secondDIV">
                            </div>
                            <input type="text" id="inputMain" name="principalInput">
                        </div>
                    </body>
                </html>
    </iframe>
</div>

在该示例中,我需要从输入中获取价值。但是 puppeteer 不会访问 #document

中的任何内容

我正在使用 nodeJS

【问题讨论】:

  • 尝试在 Puppeteer 的 iFrame 元素上使用 .contentFrame() 以获取内部文档。它是异步的,所以你必须await 它。如果这不起作用,您可能需要提供有关您的 Puppeteer 代码本身的更多详细信息 - 这对于帮助其他人提供相关解决方案很重要!
  • 嘿伙计!按照代码:` const iframeElement = await page.$('#mainFrame') const frame = await iframeElement.contentFrame() console.log('started') const value = await frame.$eval('#inputMain', input => input.value) console.log('finished') await page.evaluate((val) => { document.getElementById('inputMain').value = "READY" }, value) `` 在那个例如,控制台日志仅用于测试,因为未显示“完成”。我猜,“等待”停止代码。

标签: html node.js puppeteer


【解决方案1】:

如果我理解正确,你可以试试这样:

const iframeElement = await page.$('#mainFrame');
const frame = await iframeElement.contentFrame();
const value = await frame.$eval('#inputMain', input => input.value);

【讨论】:

  • 嘿伙计!感谢您的回答!我确实按照你说的做了,但是没有用。遵循代码: ` const iframeElement = await page.$('#mainFrame') const frame = await iframeElement.contentFrame() console.log('started') const value = await frame.$eval('#inputMain', input => input.value) console.log('finished') await page.evaluate((val) => { document.getElementById('inputMain').value = "READY" }, value) `` 例如,控制台记录只是为了测试,因为“完成”没有显示。我猜,“等待”停止代码。
  • 那么,控制台中没有错误消息,代码只是挂起?
  • 没错!没有错误。我尝试查看 wat 在输入中,但函数不执行。像这个 const value = await frame.$eval('#inputMain', input => console.log(input)) -> 它不运行。
  • 你检查浏览器控制台吗? const value = await frame.$eval('#inputMain', input =&gt; console.log(input)) 将输出到浏览器控制台,而不是 Node.js(系统)控制台。
  • 是的。浏览器控制台清澈如水。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2023-03-22
  • 2019-04-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
相关资源
最近更新 更多