我试图在go中使用chromedp浏览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选择特定单选按钮的正确咒语。如果有别的办法来实现这一点,我会全神贯注的。但是,如果可能的话,我希望避免需要一个预填充的userdir。我是chromedp的新手,所以如果这是微不足道的事情,我很抱歉。然而,我却找不到答案。有一个关于硒的类似问题,但我认为chromedp可能有足够的不同,因此答案可能也不同。
发布于 2022-05-18 06:27:16
您无法找到该元素,因为它是一个阴影元素。使用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)
}
}https://stackoverflow.com/questions/69370613
复制相似问题