【问题标题】:How to navigate Chrome settings using `chromedp`?如何使用“chromedp”浏览 Chrome 设置?
【发布时间】:2022-05-18 14:27:16
【问题描述】:

我正在尝试在 go 中使用 chromedp 导航 Chrome 设置页面。

完整的例子是here,但要点是非常基本和简单的:

//...
if err := cdp.Run(ctx,
    cdp.Navigate(`chrome://settings/content/location`),
    cdp.SendKeys(`#input`, "hello"),
); err != nil && !strings.Contains(err.Error(), "net::ERR_ABORTED") {
    log.Fatal(err)
}
//...

表面上,chrome://settings/content/location 的设置页面有一个 DOM,而 搜索字段看起来像一个输入字段(ID 为#input)。然而,尝试通过chromedp 与之交互失败:chromedp 似乎根本找不到它。

对于某些背景,我正在尝试配置 Chrome 的某些方面,即自动拒绝位置请求,这似乎没有命令行标志。或者至少我找不到一个。我上面的示例与输入字段交互 因为它似乎更容易选择。

我真正想要的是单击“不允许网站查看您的位置”的单选按钮。与上面的输入字段类似,我无法弄清楚会导致chromedp 选择特定单选按钮的正确咒语。如果有其他方法可以实现这一目标,我会全力以赴。但是,如果可能,我希望避免需要预先填充的 userdir。我是chromedp 的新手,所以如果这是微不足道的事情,我深表歉意。然而,我找不到答案。有一个similar question about selenium,但我认为chromedp 可能完全不同,答案也可能不同。

【问题讨论】:

    标签: go chromedp


    【解决方案1】:

    您找不到该元素,因为它是一个阴影元素。使用 chromedp,您可以使用 chromedp.ByJSPath 搜索阴影元素。这是从https://github.com/chromedp/chromedp/issues/1050#issuecomment-1085474910复制的示例:

    package main
    
    import (
        "context"
        "log"
    
        "github.com/chromedp/chromedp"
    )
    
    func main() {
        ctx, cancel := chromedp.NewContext(context.Background())
        defer cancel()
    
        if err := chromedp.Run(ctx,
            chromedp.Navigate("chrome://settings/handlers"),
            chromedp.Click(`document.querySelector("body > settings-ui").shadowRoot.querySelector("#main").shadowRoot.querySelector("settings-basic-page").shadowRoot.querySelector("#basicPage > settings-section > settings-privacy-page").shadowRoot.querySelector("#pages > settings-subpage > protocol-handlers").shadowRoot.querySelector("#protcolHandlersRadioBlock")`, chromedp.ByJSPath),
        ); err != nil {
            log.Fatal(err)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-18
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多