如何捕获显示在网页上的警报框并使用chromedp在其中获取文本
我注意到当警报显示时,我可以看到Page.javascriptDialogOpening正在显示
我正在使用
cdp.EvaluateAsDevTools("Page.javascriptDialogOpening", res)
在其中获取文本,但是它不起作用 如何在chromedp中处理它?</ p>
答案 0 :(得分: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。 希望能有所帮助;)
答案 1 :(得分: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!
}
})
}