javascript - 如何在 Puppeteer 中选择 iframe 元素中的元素
问题描述
由于 ESPN 不提供 API,我正在尝试使用 Puppeteer 来抓取有关我的梦幻足球联赛的数据。但是,由于登录表单与 iframe 元素嵌套,我很难尝试使用 puppeteer 登录。
我去了http://www.espn.com/login并选择了 iframe。除了主要部分之外,我似乎无法选择 iframe 中的任何元素
frame.$('.main')
这是似乎使用登录表单获取 iframe 的代码。
const browser = await puppeteer.launch({headless:false});
const page = await browser.newPage();
await page.goto('http://www.espn.com/login')
await page.waitForSelector("iframe");
const elementHandle = await page.$('div#disneyid-wrapper iframe');
const frame = await elementHandle.contentFrame();
await browser.close()
我希望能够访问 iframe 元素中的用户名字段、密码字段和登录按钮。每当我尝试访问这些字段时,都会返回 null。
解决方案
您可以contentFrame
像现在一样使用 iframe,然后调用$
.
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('http://www.espn.com/login')
const elementHandle = await page.waitForSelector('div#disneyid-wrapper iframe');
const frame = await elementHandle.contentFrame();
await frame.waitForSelector('[ng-model="vm.username"]');
const username = await frame.$('[ng-model="vm.username"]');
await username.type('foo');
await browser.close()
推荐阅读
- javascript - 如何确定下拉菜单应该显示向上还是向下方向
- java - E/RecyclerView:没有附加适配器;跳过布局 4
- python - Python 程序只能从 IDLE 运行
- mongodb - axios返回的数据不能写入变量
- python - 使用 readlines 从文件打印 - 新行加倍
- excel - 当其他任何一个单元格发生更改时,如何使用 Excel 更改三个单元格?
- firebase-realtime-database - 当我 invalidate() 我的数据时,onChanged submitList 在 loadInitial 从 firebase 获取数据之前触发了 0 个项目
- scala - 使用 Scala 将多列转换为 Spark Dataframe 上的一列地图
- sql - MemSQL - 追加查询类型对象
- angular - Angular Universal Build 错误“缺少脚本:build:ssr”