【问题标题】: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. 希望对您有所帮助;)

    【讨论】:

      猜你喜欢
      • 2023-01-02
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      相关资源
      最近更新 更多