如何使用' chromedp '浏览Chrome设置?



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

完整的示例在这里,但要点是非常基本和简单的:

//...
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选择特定的单选按钮。如果有其他方法可以做到这一点,我洗耳恭听。但是,如果可能的话,我希望避免需要预先填充的用户目录。我是chromedp的新手,所以如果这是微不足道的事情,我很抱歉。然而,我找不到答案。有一个关于硒的类似问题,但我认为chromedp可能是足够不同的,答案也可能不同。

你找不到这个元素,因为它是一个阴影元素。使用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)
}
}

相关内容

  • 没有找到相关文章

最新更新