// Package fenwei // @Author gmy 2024/8/20 14:47:00 package fenwei import ( "bytes" "context" "eta/eta_data_analysis/utils" "fmt" "github.com/chromedp/cdproto/network" "github.com/chromedp/chromedp" "io" "log" "net/http" "time" ) type DataProcessor interface { FetchAndProcess() (string, error) GenerateRequestParams(string) map[string]string } type BaseProcessor struct { URL string } func (p *BaseProcessor) FetchAndProcess() (string, error) { // 获取当前时间 yyyy-MM-dd now := time.Now() currentTime := now.Format(utils.FormatDateUnSpace) params := p.GenerateRequestParams(currentTime) req, err := http.NewRequest("POST", p.URL, bytes.NewBufferString(params["params"])) if err != nil { return "", err } // 设置请求头 req.Header.Set("Content-Type", "application/json") req.Header.Set("accept-language", "zh-CN,zh;q=0.9") client := &http.Client{} resp, err := client.Do(req) if err != nil { return "", err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return "", err } return p.ProcessResponse(string(body)), nil } // GenerateRequestParams 让子类来实现这个方法 func (p *BaseProcessor) GenerateRequestParams(string) map[string]string { return map[string]string{} } func (p *BaseProcessor) ProcessResponse(data string) string { return "Processed Data: " + data } // GetCookieByChrome 获取cookie func getCookieByChrome() (cookieStr string, err error) { // 读取Cookie if utils.FenweiNetUseName == "" { err = fmt.Errorf("汾渭账号未设置") return } if utils.FenweiNetPassword == "" { err = fmt.Errorf("汾渭密码未设置") return } opts := append( chromedp.DefaultExecAllocatorOptions[:], chromedp.Flag("headless", false), ) allocCtx, cancel1 := chromedp.NewExecAllocator(context.Background(), opts...) defer cancel1() // 创建chrome实例 ctx, cancel2 := chromedp.NewContext( allocCtx, chromedp.WithLogf(log.Printf), ) defer cancel2() err = chromedp.Run(ctx, chromedp.Navigate(`https://www.sxcoal.com/`), chromedp.Click(`.pc_content__jO_mq`, chromedp.ByQuery), chromedp.Sleep(2*time.Second), chromedp.SetValue(`div.Sign_username__7eYwE input[type="text"]`, utils.FenweiNetUseName, chromedp.ByQuery), chromedp.SetValue(`div.Sign_password__dwxMn input[type="password"]`, utils.FenweiNetPassword, chromedp.ByQuery), chromedp.Sleep(2*time.Second), // 登录 chromedp.Click(`.Button_text__D25sy`, chromedp.ByQuery), chromedp.ActionFunc(func(ctx context.Context) error { cookies, err := network.GetCookies().Do(ctx) if err != nil { return err } for _, v := range cookies { cookieStr = cookieStr + v.Name + "=" + v.Value + ";" } utils.FileLog.Info("header cookie:" + cookieStr) return nil }), ) return } func encodeParams(params map[string]string) string { var result string for key, value := range params { result += fmt.Sprintf("%s=%s&", key, value) } return result[:len(result)-1] }