main.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package main
  2. import (
  3. "flag"
  4. "jycdp"
  5. "log"
  6. "os"
  7. )
  8. type (
  9. Config struct {
  10. RunModel string `yaml:"run_model"`
  11. WebsocketURL string `yaml:"websocket_url"` //仅远程浏览器有用
  12. ProxyAddr string `yaml:"proxy_address"` //仅本地浏览器有用
  13. HeadLess bool `yaml:"headless"`
  14. ShowImage bool `yaml:"show_image"`
  15. StorageType string `yaml:"storage"`
  16. StorageMongoURI string `yaml:"mongo_address"`
  17. StorageMongoDB string `yaml:"mongo_db"`
  18. StorageMongoCollection string `yaml:"mongo_colesstion"`
  19. StorageFile string `yaml:"storage_file"`
  20. WeChatRobotURL string `yaml:"wechat_robot_url"`
  21. DownloadPath string `yaml:"download_path"`
  22. }
  23. )
  24. var (
  25. configFile = flag.String("cf", "./config.yaml", "配置文件")
  26. luaFile = flag.String("sf", "./scripts/demo.lua", "lua文件")
  27. dataFile = flag.String("df", "./data.dat", "数据文件")
  28. logFile = flag.String("lf", "./log.dat", "日志文件")
  29. storage Storage
  30. config *Config = new(Config)
  31. )
  32. // init
  33. func init() {
  34. flag.Parse()
  35. jycdp.LoadConfig(*configFile, config)
  36. var err error
  37. switch config.StorageType {
  38. case "console":
  39. storage = NewConsoleStorage()
  40. case "mongodb":
  41. storage = NewMongoStorage(config.StorageMongoURI,
  42. config.StorageMongoDB,
  43. config.StorageMongoCollection)
  44. case "wechatrobot":
  45. storage = NewWeChatMsgStorage(config.WeChatRobotURL)
  46. default:
  47. var theDataFile = *dataFile
  48. if theDataFile == "" {
  49. theDataFile = config.StorageFile
  50. }
  51. fi, err := os.OpenFile(theDataFile, os.O_CREATE|os.O_APPEND|os.O_RDWR|os.O_SYNC|os.O_TRUNC, 0777)
  52. if err != nil {
  53. panic(err)
  54. }
  55. storage = NewFileStorage(fi)
  56. }
  57. if *logFile != "" {
  58. sl, err = NewSpiderLog(*logFile)
  59. if err != nil {
  60. log.Fatal(err)
  61. }
  62. }
  63. //log.Println(config)
  64. }
  65. func main() {
  66. bs, err := os.ReadFile(*luaFile)
  67. if err != nil {
  68. log.Fatal(err)
  69. }
  70. script := string(bs)
  71. var vm *VM
  72. if config.RunModel == "local" {
  73. vm = NewLocalVM(config.HeadLess, config.ShowImage, config.ProxyAddr, config.DownloadPath, storage)
  74. } else {
  75. vm = NewRemoteVM(config.WebsocketURL, storage)
  76. }
  77. if err := vm.RunScript(script); err != nil {
  78. log.Println(err.Error())
  79. }
  80. //最后执行
  81. if sl != nil {
  82. sl.Close()
  83. }
  84. }