puppeteer 定位页面打开后通过js加载的frame
时间: 2023-09-14 18:09:18 浏览: 52
如果您需要在页面加载完成后通过 JavaScript 动态加载 frame,您可以使用 Puppeteer 的 `waitForSelector` 方法等待 frame 元素出现,然后使用 `contentFrame` 方法获取 frame 对象。
以下是一个示例代码:
```javascript
await page.goto('https://example.com');
// 等待 frame 元素加载完成
const frameSelector = '#frame-selector';
await page.waitForSelector(frameSelector);
// 获取 frame 元素的句柄
const frameHandle = await page.$(frameSelector);
// 获取 frame 对象
const frame = await frameHandle.contentFrame();
// 在 frame 中执行操作
await frame.type('#input-selector', 'text to input');
```
在上面的示例中,`#frame-selector` 是您要等待加载的 frame 元素的选择器,`#input-selector` 是在 frame 中要操作的输入框的选择器。请根据您的实际情况修改选择器。
相关问题
puppeteer 定位后加载的frame
如果您使用 Puppeteer 定位了一个 frame,并且需要在该 frame 中执行操作,可以使用以下代码:
```javascript
// 获取 frame 元素的句柄
const frameHandle = await page.$('#frame-selector');
// 获取 frame 对象
const frame = await frameHandle.contentFrame();
// 在 frame 中执行操作
await frame.type('#input-selector', 'text to input');
```
其中,`#frame-selector` 是您要定位的 frame 元素的选择器,`#input-selector` 是在 frame 中要操作的输入框的选择器。
puppeteer 如何判断页面是否已经完全加载
可以在页面的 `window` 对象上监听 `load` 事件来判断页面是否完全加载。当页面中所有的资源都已经加载完成时,这个事件就会被触发。
下面是一个例子:
```javascript
await page.goto('https://example.com');
await page.evaluate(() => {
return new Promise((resolve) => {
window.addEventListener('load', resolve);
});
});
console.log('page loaded');
```
还可以使用 page.waitForNavigation()
```javascript
await page.goto('https://example.com', {waitUntil: 'networkidle0'});
console.log('page loaded');
```
两种方法都可以判断页面是否完全加载,可以根据个人的需求选择使用哪种。