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

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

https://github.com/chromedp/chromedp

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

  1. func main() {
  2. var err error
  3. // create context
  4. ctxt, cancel := context.WithCancel(context.Background())
  5. defer cancel()
  6. // create chrome instance
  7. c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
  8. if err != nil {
  9. log.Fatal(err)
  10. }
  11. // run task list
  12. var val1, val2, val3, val4 string
  13. err = c.Run(ctxt, sendkeys(&val1, &val2, &val3, &val4))
  14. if err != nil {
  15. log.Fatal(err)
  16. }
  17. // shutdown chrome
  18. err = c.Shutdown(ctxt)
  19. if err != nil {
  20. log.Fatal(err)
  21. }
  22. // wait for chrome to finish
  23. err = c.Wait()
  24. if err != nil {
  25. log.Fatal(err)
  26. }
  27. log.Printf("#input1 value: %s", val1)
  28. log.Printf("#textarea1 value: %s", val2)
  29. log.Printf("#input2 value: %s", val3)
  30. log.Printf("#select1 value: %s", val4)
  31. }
  32. func sendkeys(val1, val2, val3, val4 *string) chromedp.Tasks {
  33. return chromedp.Tasks{
  34. chromedp.Navigate("file:" + os.Getenv("GOPATH") +
  35. "/src/github.com/chromedp/chromedp/testdata/visible.html"),
  36. chromedp.WaitVisible(`#input1`, chromedp.ByID),
  37. chromedp.WaitVisible(`#textarea1`, chromedp.ByID),
  38. chromedp.SendKeys(`#textarea1`,
  39. kb.End+"\b\b\n\naoeu\n\ntest1\n\nblah2\n\n\t\t\t\b\bother
  40. box!\t\ntest4", chromedp.ByID),
  41. chromedp.Value(`#input1`, val1, chromedp.ByID),
  42. chromedp.Value(`#textarea1`, val2, chromedp.ByID),
  43. chromedp.SetValue(`#input2`, "test3", chromedp.ByID),
  44. chromedp.Value(`#input2`, val3, chromedp.ByID),
  45. chromedp.SendKeys(`#select1`, kb.ArrowDown+kb.ArrowDown,
  46. chromedp.ByID),
  47. chromedp.Value(`#select1`, val4, chromedp.ByID),
  48. chromedp.Sleep(30 * time.Second),
  49. }
  50. }

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

  1. // Command click is a chromedp example demonstrating how to use a selector to
  2. // click on an element.
  3. package main
  4. import (
  5. "context"
  6. "log"
  7. "time"
  8. "github.com/chromedp/chromedp"
  9. )
  10. func main() {
  11. var err error
  12. // create context
  13. ctxt, cancel := context.WithCancel(context.Background())
  14. defer cancel()
  15. // create chrome instance
  16. c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
  17. if err != nil {
  18. log.Fatal(err)
  19. }
  20. // run task list
  21. err = c.Run(ctxt, click())
  22. if err != nil {
  23. log.Fatal(err)
  24. }
  25. // shutdown chrome
  26. err = c.Shutdown(ctxt)
  27. if err != nil {
  28. log.Fatal(err)
  29. }
  30. // wait for chrome to finish
  31. err = c.Wait()
  32. if err != nil {
  33. log.Fatal(err)
  34. }
  35. }
  36. func click() chromedp.Tasks {
  37. return chromedp.Tasks{
  38. chromedp.Navigate(`https://golang.org/pkg/time/`),
  39. chromedp.WaitVisible(`#footer`),
  40. chromedp.Click(`#pkg-overview`, chromedp.NodeVisible),
  41. chromedp.Sleep(150 * time.Second),
  42. }
  43. }

截取屏幕截图

  1. // Command screenshot is a chromedp example demonstrating how to take a
  2. // screenshot of a specific element.
  3. package main
  4. import (
  5. "context"
  6. "io/ioutil"
  7. "log"
  8. "time"
  9. "github.com/chromedp/chromedp"
  10. )
  11. func main() {
  12. var err error
  13. // create context
  14. ctxt, cancel := context.WithCancel(context.Background())
  15. defer cancel()
  16. // create chrome instance
  17. c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
  18. if err != nil {
  19. log.Fatal(err)
  20. }
  21. // run task list
  22. var buf []byte
  23. err = c.Run(ctxt, screenshot(`https://brank.as/`, `#contact-form`, &buf))
  24. if err != nil {
  25. log.Fatal(err)
  26. }
  27. // shutdown chrome
  28. err = c.Shutdown(ctxt)
  29. if err != nil {
  30. log.Fatal(err)
  31. }
  32. // wait for chrome to finish
  33. err = c.Wait()
  34. if err != nil {
  35. log.Fatal(err)
  36. }
  37. err = ioutil.WriteFile("contact-form.png", buf, 0644)
  38. if err != nil {
  39. log.Fatal(err)
  40. }
  41. }
  42. func screenshot(urlstr, sel string, res *[]byte) chromedp.Tasks {
  43. return chromedp.Tasks{
  44. chromedp.Navigate(urlstr),
  45. chromedp.Sleep(2 * time.Second),
  46. chromedp.WaitVisible(sel, chromedp.ByID),
  47. chromedp.WaitNotVisible(`div.v-middle > div.la-ball-clip-rotate`, chromedp.ByQuery),
  48. chromedp.Screenshot(sel, res, chromedp.NodeVisible, chromedp.ByID),
  49. }
  50. }
ft_authoradmin  ft_create_time2019-05-27 14:48
 ft_update_time2019-05-27 14:49