get_code.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package backend
  2. import (
  3. b64 "encoding/base64"
  4. "errors"
  5. "regexp"
  6. "strings"
  7. "github.com/allanpk716/ChineseSubFinder/pkg/rod_helper"
  8. "github.com/go-rod/rod/lib/proto"
  9. "github.com/sirupsen/logrus"
  10. )
  11. func GetCode(log *logrus.Logger, codeUrl string) (string, error) {
  12. defer func() {
  13. log.Infoln("End Get Code")
  14. }()
  15. log.Infoln("Start Get Code...")
  16. browser, err := rod_helper.NewBrowser(log, "", "", false)
  17. if err != nil {
  18. return "", err
  19. }
  20. defer func() {
  21. _ = browser.Close()
  22. }()
  23. page, err := browser.Page(proto.TargetCreateTarget{URL: codeUrl})
  24. if err != nil {
  25. return "", err
  26. }
  27. defer func() {
  28. _ = page.Close()
  29. }()
  30. err = page.WaitLoad()
  31. if err != nil {
  32. return "", err
  33. }
  34. htmlString, err := page.HTML()
  35. if err != nil {
  36. return "", err
  37. }
  38. code := ""
  39. var re = regexp.MustCompile(`(?m)>\d{6}<`)
  40. parts := re.FindAllString(htmlString, -1)
  41. if parts == nil || len(parts) <= 0 {
  42. return "", errors.New("code not found")
  43. } else {
  44. code = strings.ReplaceAll(parts[0], "<", "")
  45. code = strings.ReplaceAll(code, ">", "")
  46. }
  47. sEnc := b64.StdEncoding.EncodeToString([]byte(code))
  48. log.Infoln("code:", code)
  49. log.Infoln("sEnc:", sEnc)
  50. return sEnc, nil
  51. }