如何使用chromedp登录网页并截图

时间:2018-08-19 21:41:23

标签: go browser automation

如何使用chromedp登录网页并截图。

https://github.com/chromedp/chromedp

1 个答案:

答案 0 :(得分:0)

将文本发送到网站输入的示例

func main() {
  var err error

  // create context
  ctxt, cancel := context.WithCancel(context.Background())
  defer cancel()

  // create chrome instance
  c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
  if err != nil {
      log.Fatal(err)
  }

  // run task list
  var val1, val2, val3, val4 string
  err = c.Run(ctxt, sendkeys(&val1, &val2, &val3, &val4))
  if err != nil {
      log.Fatal(err)
  }

  // shutdown chrome
  err = c.Shutdown(ctxt)
  if err != nil {
      log.Fatal(err)
  }

  // wait for chrome to finish
  err = c.Wait()
  if err != nil {
      log.Fatal(err)
  }

  log.Printf("#input1 value: %s", val1)
  log.Printf("#textarea1 value: %s", val2)
  log.Printf("#input2 value: %s", val3)
  log.Printf("#select1 value: %s", val4)
}

func sendkeys(val1, val2, val3, val4 *string) chromedp.Tasks {
  return chromedp.Tasks{
      chromedp.Navigate("file:" + os.Getenv("GOPATH") + 
      "/src/github.com/chromedp/chromedp/testdata/visible.html"),
      chromedp.WaitVisible(`#input1`, chromedp.ByID),
      chromedp.WaitVisible(`#textarea1`, chromedp.ByID),
      chromedp.SendKeys(`#textarea1`,
      kb.End+"\b\b\n\naoeu\n\ntest1\n\nblah2\n\n\t\t\t\b\bother
      box!\t\ntest4", chromedp.ByID),
      chromedp.Value(`#input1`, val1, chromedp.ByID),
      chromedp.Value(`#textarea1`, val2, chromedp.ByID),
      chromedp.SetValue(`#input2`, "test3", chromedp.ByID),
      chromedp.Value(`#input2`, val3, chromedp.ByID),
      chromedp.SendKeys(`#select1`, kb.ArrowDown+kb.ArrowDown,
      chromedp.ByID),
      chromedp.Value(`#select1`, val4, chromedp.ByID),
      chromedp.Sleep(30 * time.Second),
  }
}

之后,您可以单击登录按钮,另一个示例

// Command click is a chromedp example demonstrating how to use a selector to
// click on an element.
package main

import (
  "context"
  "log"
  "time"

  "github.com/chromedp/chromedp"
)

func main() {
  var err error

  // create context
  ctxt, cancel := context.WithCancel(context.Background())
  defer cancel()

  // create chrome instance
  c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
  if err != nil {
      log.Fatal(err)
  }

  // run task list
  err = c.Run(ctxt, click())
  if err != nil {
      log.Fatal(err)
  }

  // shutdown chrome
  err = c.Shutdown(ctxt)
  if err != nil {
      log.Fatal(err)
  }

  // wait for chrome to finish
  err = c.Wait()
  if err != nil {
      log.Fatal(err)
  }
}

func click() chromedp.Tasks {
  return chromedp.Tasks{
      chromedp.Navigate(`https://golang.org/pkg/time/`),
      chromedp.WaitVisible(`#footer`),
      chromedp.Click(`#pkg-overview`, chromedp.NodeVisible),
      chromedp.Sleep(150 * time.Second),
  }
}

用于截图

// Command screenshot is a chromedp example demonstrating how to take a
// screenshot of a specific element.
package main

import (
  "context"
  "io/ioutil"
  "log"
  "time"

  "github.com/chromedp/chromedp"
)

func main() {
  var err error

  // create context
  ctxt, cancel := context.WithCancel(context.Background())
  defer cancel()

  // create chrome instance
  c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
  if err != nil {
      log.Fatal(err)
  }

  // run task list
  var buf []byte
  err = c.Run(ctxt, screenshot(`https://brank.as/`, `#contact-form`, &buf))
  if err != nil {
      log.Fatal(err)
  }

  // shutdown chrome
  err = c.Shutdown(ctxt)
  if err != nil {
      log.Fatal(err)
  }

  // wait for chrome to finish
  err = c.Wait()
  if err != nil {
      log.Fatal(err)
  }

  err = ioutil.WriteFile("contact-form.png", buf, 0644)
  if err != nil {
      log.Fatal(err)
  }
}

func screenshot(urlstr, sel string, res *[]byte) chromedp.Tasks {
  return chromedp.Tasks{
      chromedp.Navigate(urlstr),
      chromedp.Sleep(2 * time.Second),
      chromedp.WaitVisible(sel, chromedp.ByID),
      chromedp.WaitNotVisible(`div.v-middle > div.la-ball-clip-rotate`, chromedp.ByQuery),
      chromedp.Screenshot(sel, res, chromedp.NodeVisible, chromedp.ByID),
  }
}

如果您需要更详细的答案,则需要发布网站,希望对您有所帮助