forked from onjava8/maotai
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjdTdudfp.go
143 lines (128 loc) · 4.29 KB
/
jdTdudfp.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package cmd
import (
"context"
"github.com/chromedp/cdproto/cdp"
"github.com/chromedp/cdproto/network"
"github.com/chromedp/chromedp"
"github.com/spf13/cobra"
"github.com/tidwall/gjson"
"github.com/unknwon/goconfig"
"github.com/ztino/jd_seckill/common"
"github.com/ztino/jd_seckill/jd_seckill"
"github.com/ztino/jd_seckill/log"
"net/url"
"os"
"time"
)
func init() {
rootCmd.AddCommand(jdTdudfpCmd)
jdTdudfpCmd.Flags().StringP("good_url","g","","")
_=jdTdudfpCmd.MarkFlagRequired("good_url")
}
var jdTdudfpCmd = &cobra.Command{
Use: "jdTdudfp",
Short: "auto get jd eid and fp",
Run: startJdTdudfp,
}
func startJdTdudfp(cmd *cobra.Command, args []string) {
session := jd_seckill.NewSession(common.CookieJar)
err := session.CheckLoginStatus()
if err != nil {
log.Error("自动获取eid和fp失败,请重新登录")
} else {
log.Warn("开始自动获取eid和fp,如遇卡住请结束进程,重新启动")
options := []chromedp.ExecAllocatorOption{
chromedp.Flag("headless", false), //debug使用
chromedp.Flag("blink-settings", "imagesEnabled=false"), //禁用图片加载
chromedp.Flag("start-maximized", true), //最大化窗口
chromedp.Flag("no-sandbox", true), //禁用沙盒, 性能优先
chromedp.Flag("disable-setuid-sandbox", true), //禁用setuid沙盒, 性能优先
chromedp.Flag("no-default-browser-check", true), //不检查默认浏览器
chromedp.Flag("disable-plugins", true), //禁用扩展
chromedp.UserAgent(common.Config.MustValue("config", "default_user_agent", "")),
}
options = append(chromedp.DefaultExecAllocatorOptions[:], options...)
c, cc := chromedp.NewExecAllocator(context.Background(), options...)
defer cc()
ctx, cancel := chromedp.NewContext(c)
defer cancel()
//获取cookie
u, _ := url.Parse("http://jd.com")
cookies := common.CookieJar.Cookies(u)
//商品链接
good_url,_:=cmd.Flags().GetString("good_url")
//返回的eid和fp
returnEid:=""
returnFp:=""
//获取到的eid和fp
eid := ""
fp := ""
var res []byte
err = chromedp.Run(ctx,
chromedp.Tasks{
chromedp.ActionFunc(func(ctx context.Context) error {
//设置cookie
expr := cdp.TimeSinceEpoch(time.Now().Add(180 * 24 * time.Hour))
for _, cookie := range cookies {
network.SetCookie(cookie.Name, cookie.Value).
WithExpires(&expr).
WithPath("/").
WithDomain("." + cookie.Domain).
Do(ctx)
}
return nil
}),
},
chromedp.Navigate(good_url),
chromedp.WaitVisible("#InitCartUrl"), //加入购物车
chromedp.Sleep(2 * time.Second),
chromedp.Click("#InitCartUrl"),
chromedp.WaitVisible(".btn-addtocart"), //去购车结算
chromedp.Sleep(2 * time.Second),
chromedp.Click(".btn-addtocart"),
chromedp.WaitVisible(".common-submit-btn"), //去结算
chromedp.Sleep(2 * time.Second),
chromedp.Click(".common-submit-btn"),
chromedp.Sleep(3 * time.Second),
chromedp.Evaluate("_JdTdudfp", &res),
chromedp.Evaluate("_JdEid", &eid),
chromedp.Evaluate("_JdJrTdRiskFpInfo", &fp),
)
if err != nil {
log.Error("chromedp 出错了")
log.Fatal(err)
}
value := string(res)
//判断_JdTdudfp是否能获取到eid和fp,如果不能去获取_JdEid和_JdJrTdRiskFpInfo获取到的值
if gjson.Valid(value) && gjson.Get(value, "eid").String() != "" && gjson.Get(value, "fp").String() != "" {
returnEid = gjson.Get(value, "eid").String()
returnFp = gjson.Get(value, "fp").String()
}else{
if eid!="" && fp!=""{
returnEid=eid
returnFp=fp
}
}
//eid,fp合法性判断
if returnEid=="" || returnFp=="" {
log.Error("获取失败,请重新尝试,返回信息:" + value)
}else{
log.Println("eid:" + returnEid)
log.Println("fp:" + returnFp)
//修改配置文件
confFile := common.SoftDir+"/conf.ini"
cfg, err := goconfig.LoadConfigFile(confFile)
if err != nil {
log.Error("配置文件不存在,程序退出")
os.Exit(0)
}
cfg.SetValue("config", "eid", returnEid)
cfg.SetValue("config", "fp", returnFp)
if err := goconfig.SaveConfigFile(cfg, confFile); err != nil {
log.Error("保存配置文件失败,请手动填入配置文件")
}else{
log.Println("eid, fp参数已经自动填入配置文件")
}
}
}
}