【问题标题】:Chromedp: handle alertChromedp:处理警报
【发布时间】:2019-10-05 23:04:21
【问题描述】:
如何使用 chromedp 捕捉网页上显示的警告框并获取其中的文本
我注意到当警报出现时,我可以看到 Page.javascriptDialogOpening 正在显示
我正在使用
cdp.EvaluateAsDevTools("Page.javascriptDialogOpening", res)
获取其中的文本,但它不起作用
在chromedp中如何处理??
【问题讨论】:
标签:
google-chrome
go
web-scraping
【解决方案1】:
在 Task 中,使用 ListenTarget 并等待 JS 对话框事件。
printMsg := chromedp.ActionFunc(func(ctx context.Context) error {
chromedp.ListenTarget(lctx, func(ev interface{}) {
if _, ok := ev.(*page.EventJavascriptDialogOpening); ok { // page loaded
fmt.Printf(ev.(*page.EventJavascriptDialogOpening).Message) // holds msg!
}
})
}
【解决方案2】:
我做了一个解决方法,先将一些 javascript 硬编码到浏览器中,然后在控制台中收听警报框文本。
这里的代码供参考:
func main() {
// create context
ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
// run task list
var res interface{}
err := chromedp.Run(ctx,
chromedp.Navigate(`https://www.quackit.com/javascript/javascript_alert_box.cfm`), // navigate to random page
chromedp.EvaluateAsDevTools(`window.alert = function (txt){return txt}`, &res), // set a function to return the text in the alert box as text
chromedp.EvaluateAsDevTools(`alert('hehe')`, &res), // create an alert box to test the execution
)
if err != nil {
log.Fatal(err)
}
log.Println(res)
}
它将登录您的控制台 res.
希望对您有所帮助;)