Swa*_*ikK 10 javascript iframe webautomation node.js puppeteer
由于 ESPN 不提供 API,我尝试使用 Puppeteer 来抓取有关我的梦幻足球联赛的数据。但是,由于登录表单与 iframe 元素嵌套,我很难尝试使用 puppeteer 登录。
我去了http://www.espn.com/login并选择了 iframe。除了主要部分,我似乎无法选择 iframe 中的任何元素
frame.$('.main')
Run Code Online (Sandbox Code Playgroud)
这是似乎通过登录表单获取 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()
Run Code Online (Sandbox Code Playgroud)
我希望能够访问 iframe 元素中的用户名字段、密码字段和登录按钮。每当我尝试访问这些字段时,都会返回 null。
har*_*ded 27
您可以contentFrame像现在一样使用 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 frame.waitForSelector('[ng-model="vm.username"]');
const username = await frame.$('[ng-model="vm.username"]');
await username.type('foo');
await browser.close()
Run Code Online (Sandbox Code Playgroud)
小智 9
我在查找条纹元素时遇到了问题。原因如下:
您无法使用 JavaScript 访问具有不同来源的内容,如果您可以这样做,这将是一个巨大的安全漏洞。对于同源策略,浏览器会阻止尝试访问具有不同来源的框架的脚本。在此处查看更详细的答案
因此,当我尝试使用 puppeteer 的方法时:Page.frames()并且Page.mainFrame(). ElementHandle.contentFrame()我没有向我返回任何 iframe。问题是它是默默发生的,我不明白为什么它找不到任何东西。
将这些参数添加到启动选项解决了这个问题:
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process'
| 归档时间: |
|
| 查看次数: |
14666 次 |
| 最近记录: |