Chromedp:处理警报

时间:2019-09-24 17:38:05

标签: google-chrome go web-scraping

如何捕获显示在网页上的警报框并使用chromedp在其中获取文本

我注意到当警报显示时,我可以看到Page.javascriptDialogOpening正在显示

我正在使用

cdp.EvaluateAsDevTools("Page.javascriptDialogOpening", res)

在其中获取文本,但是它不起作用 如何在chromedp中处理它?<​​/ p>

2 个答案:

答案 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!
        }
    })

}