我正在尝试登录 Youtube,它使用 chromedp 重定向到 accounts.google.com/ServiceLogin?service=youtube...。由于某种原因,它会超时尝试从该页面检索任何内容。大多数选择器都有随机生成的类,但这不应该阻止获取正文,确实如此。屏幕截图显示了登录页面,因此它可以正确导航到那里,但在页面上找不到任何内容。有 iframe,但登录表单/输入不在一个,并且#identifierId
找不到。
这是一个代码片段:
func main() {
// create chrome instance
var buf []byte
ctx, cancel := chromedp.NewContext(
context.Background(),
// chromedp.WithDebugf(log.Printf),
)
defer cancel()
// create a timeout
ctx, cancel = context.WithTimeout(ctx, 15*time.Second)
defer cancel()
// navigate to a page, wait for an element, click
var u string
err := chromedp.Run(ctx,
chromedp.Navigate(`https://youtube.com`),
chromedp.Click(`#buttons > ytd-button-renderer > a`),
chromedp.SendKeys(`#identifierId`, "bobboshmo@gmail.com", chromedp.ByID),
chromedp.Location(&u),
)
if err != nil {
log.Fatal(err)
}
log.Printf(u)
// capture entire browser viewport, returning png with quality=90
if err := chromedp.Run(ctx, fullScreenshot(u, 90, &buf)); err != nil {
log.Fatal(err)
}
if err := ioutil.WriteFile("fullScreenshot.png", buf, 0o644); err != nil {
log.Fatal(err)
}
}
func fullScreenshot(urlstr string, quality int, res *[]byte) chromedp.Tasks {
return chromedp.Tasks{
chromedp.Navigate(urlstr),
chromedp.FullScreenshot(res, quality),
}
}