123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- // 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]
- }
|