起因
最近在使用chromedp进行爬虫的时候,发现怎么都无法获取到内容,最终发现是因为使用了iframe,chromedp获取到iframe的内容,或者无法对iframe进行操作。
方法
我们可以使用·EvaluateAsDevTools
或者Evaluate
运行javascript来完成目标。
1.获取iframe的内容
var res string //存储js执行返回内容
err := chromedp.Run(ctx,
// ._2ngM58AmonJc1uOl10jZ_H 大屏监控
chromedp.Navigate("https://compass.jinritemai.com/talent"),
chromedp.WaitVisible(`.rootMenu--2LfA8`, chromedp.ByQuery),
chromedp.Navigate("https://compass.jinritemai.com/screen/list/talent/main?live_room_id=6985777821771696932&live_app_id=1128&source=talent_home"),
chromedp.WaitReady(`._1IpfeRqi01w6dAvHzPPN_2`, chromedp.ByQuery),
//设置一个等待时间,让iframe进行加载
chromedp.Sleep(5*time.Second),
//使用EvaluateAsDevTools执行js语句,获取iframe的html
chromedp.EvaluateAsDevTools(`document.getElementsByClassName('_1IpfeRqi01w6dAvHzPPN_2')[0].contentWindow.document.body.outerHTML;`, &res),
)
if err != nil {
log.Fatal(err)
}
log.Println((res))
2. 操作iframe
chromedp.Evaluate(`document.getElementById('iframe').contentWindow.document.querySelector('div[class^=ckplayer] video').click();aaa="111"`,
&res),
参考
https://github.com/chromedp/chromedp/issues/72#issuecomment-642151827
https://github.com/chromedp/chromedp/issues/212#issuecomment-416462733