chromedp click相关问题
chromde点击事件卡住处理
err := chromedp.Run(ctx,
chromedp.Navigate("urlstr"),
chromedp.ActionFunc(func(ctx context.Context) error {
var nodes []*cdp.Node
if err := chromedp.Nodes("selecter", &nodes, chromedp.AtLeast(0).Do(ctx); err != nil { return err }
if len(nodes) == 0 { return nil } // 当选择器没有选择到相应的元素时跳过,也可以做其他处理
return chromedp.MouseClickNode(nodes[0]).Do(ctx)
})
)
click时选择器无法选中具体元素处理
当遇到无法根据选择器选择具体的元素时,比如:“#app > div > div > div.page > div > a:last-child"无法选中最后的一个按钮时,可以将”#app > div > div > div.page > div > a"全部取出来,然后找到最后一个进行点击
err := chromedp.Run(ctx,
chromedp.Navigate("urlstr"),
chromedp.ActionFunc(func(ctx context.Context) error {
var nodes []*cdp.Node
if err := chromedp.Nodes("#app > div > div > div.page > div > a", &nodes, chromedp.AtLeast(0).Do(ctx); err != nil { return err }
if len(nodes) == 0 { return nil }
return chromedp.MouseClickNode(nodes[len(nodes)-1]).Do(ctx) // 选择的是最后一个元素
})
)
根据某个元素中的文本的内容进行点击
selecor := //a[contains(normalize-space(),'下载')] | //a[contains(normalize-space(),'安装')] | //button[contains(normalize-space(),'下载')] | //button[contains(normalize-space(),'安装')] |
selecor写法是根据XPath中的文本内容函数处理,表示a标签或者button的内容中是否包含了"安装",“下载”
总结
仅记录遇到过的问题