init
This commit is contained in:
201
cmd/main.go
Normal file
201
cmd/main.go
Normal file
@@ -0,0 +1,201 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"go-sccchina/libs"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-rod/rod"
|
||||
"github.com/go-rod/rod/lib/proto"
|
||||
)
|
||||
|
||||
var login = flag.Bool("login", false, "是否登录")
|
||||
var test = flag.Bool("time", false, "测试")
|
||||
var Browser libs.Browser
|
||||
|
||||
// var Chrome libs.Chrome
|
||||
func main() {
|
||||
flag.Parse()
|
||||
log.Println(*login)
|
||||
if *login {
|
||||
loginFun()
|
||||
}
|
||||
if *test {
|
||||
obj := Browser.GetBrowser(1, &libs.Fingerprint{})
|
||||
browser := obj.Browser
|
||||
page := obj.Page
|
||||
cookies, _ := loadCookiesFromFile("account_cookie.json")
|
||||
browser.SetCookies(cookies)
|
||||
page.MustNavigate("https://cart.taobao.com/cart.htm?spm=tbpc.mytb_index.leftnav.1.6db2782d0TVVip").MustWaitLoad()
|
||||
page.MustWaitNavigation()
|
||||
page.MustWaitLoad() // DOM 加载完成
|
||||
page.MustWaitIdle() // 基本静止(减少早期误判)
|
||||
page.MustActivate() // 前置以便扫码
|
||||
// // 获取当前课程列表
|
||||
// res := getApiResponse(page, "https://hnit.sccchina.net/student/student/coursestudy/getlist")
|
||||
// var dataBody map[string]any
|
||||
// json.Unmarshal([]byte(res), &dataBody)
|
||||
// list := dataBody["items"].([]interface{})
|
||||
// // pretty, _ := json.MarshalIndent(list, "", " ")
|
||||
// // 判断当前有多少个课程需要学习
|
||||
// for _, v := range list {
|
||||
// m := v.(map[string]interface{})
|
||||
// realCoursewarePlayNum := m["realCoursewarePlayNum"].(string)
|
||||
// realCoursewarePlayTime := m["realCoursewarePlayTime"].(string)
|
||||
// var showScore string = "0"
|
||||
// if m["showScore"] != nil {
|
||||
// if str, ok := m["showScore"].(string); ok {
|
||||
// showScore = str
|
||||
// }
|
||||
// }
|
||||
// courseVersionID := m["courseVersionID"].(string)
|
||||
// teachplanCourseVersionId := m["teachplanCourseVersionId"].(string)
|
||||
// sign := m["sign"].(string)
|
||||
// userAccountId := m["userAccountId"].(string)
|
||||
// versionName := m["versionName"].(string)
|
||||
// // 分割字符串 判断当前 课时 成绩
|
||||
// playTimeArr := strings.Split(realCoursewarePlayTime, " / ")
|
||||
// // 将第一个转为数字
|
||||
// activeTime, _ := strconv.ParseFloat(strings.TrimSpace(playTimeArr[0]), 64)
|
||||
// var endTime float64
|
||||
// if strings.TrimSpace(playTimeArr[1]) == "--" {
|
||||
// endTime = 360
|
||||
// } else {
|
||||
// TimeEnd, _ := strconv.ParseFloat(strings.TrimSpace(playTimeArr[1]), 64)
|
||||
// endTime = TimeEnd
|
||||
// }
|
||||
// // 判断有哪些课程需要观看
|
||||
// // var pages []*rod.Page
|
||||
// if showScore == "0" && activeTime < endTime {
|
||||
// log.Println(activeTime)
|
||||
// log.Println(endTime)
|
||||
// log.Println(realCoursewarePlayNum, realCoursewarePlayTime, showScore, courseVersionID, teachplanCourseVersionId, sign, userAccountId, versionName)
|
||||
// url := fmt.Sprintf(`https://hnit.sccchina.net/student/videolearning.html#Subpage/StudentVersionVideo?courseVersionId=%s&teachplanCourseVersionId=%s&sign=%s&userAccountId=%s&syncPracticePiwik=1&piwikSiteId=750&versionName=%s`, courseVersionID, teachplanCourseVersionId, sign, userAccountId, versionName)
|
||||
// log.Println(url)
|
||||
// time.Sleep(3 * time.Second)
|
||||
// p := browser.MustPage(url)
|
||||
// satrt := p.Timeout(5 * time.Second).MustElement(`#button-courseware`)
|
||||
// satrt.MustClick()
|
||||
// time.Sleep(2 * time.Second)
|
||||
// log.Println(1)
|
||||
// iframeEl := p.Timeout(10*time.Second).MustElementR(`iframe`, ".*")
|
||||
// log.Println(2)
|
||||
// log.Println(iframeEl)
|
||||
// if iframeEl != nil {
|
||||
// iframePage := iframeEl.MustFrame()
|
||||
// iframePage.MustWaitLoad()
|
||||
// // 再次进入内嵌的iframe
|
||||
// iframeEl2 := iframePage.Timeout(10 * time.Second).MustElement(`iframe#iframe`)
|
||||
// iframePage2 := iframeEl2.MustFrame()
|
||||
// iframePage2.MustWaitLoad()
|
||||
// cl := iframePage2.Timeout(5 * time.Second).MustElement(`em.pop_close`)
|
||||
// cl.MustClick()
|
||||
// }
|
||||
// time.Sleep(3 * time.Second)
|
||||
// // pages = append(pages, p)
|
||||
|
||||
// // go func() {
|
||||
// // browser.MustPage(url)
|
||||
// // }()
|
||||
// }
|
||||
// }
|
||||
// log.Println(string(pretty))
|
||||
select {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func loginFun() {
|
||||
obj := Browser.GetBrowser(1, &libs.Fingerprint{})
|
||||
browser := obj.Browser
|
||||
page := obj.Page
|
||||
page.MustNavigate(`https://login.taobao.com/havanaone/login/login.htm`).MustWaitLoad()
|
||||
page.MustWaitNavigation()
|
||||
page.MustWaitLoad() // DOM 加载完成
|
||||
page.MustWaitIdle() // 基本静止(减少早期误判)
|
||||
page.MustActivate() // 前置以便扫码
|
||||
|
||||
var usl string = "https://login.taobao.com/havanaone/login/login.htm"
|
||||
for usl == "https://login.taobao.com/havanaone/login/login.htm" {
|
||||
uri := page.MustEval("() => window.location.href").String()
|
||||
log.Println("获取当前网页URL:", uri)
|
||||
usl = uri
|
||||
time.Sleep(5 * time.Second)
|
||||
}
|
||||
page.MustNavigate("https://cart.taobao.com/cart.htm?spm=tbpc.mytb_index.leftnav.1.6db2782d0TVVip").MustWaitLoad()
|
||||
page.MustWaitNavigation()
|
||||
page.MustWaitLoad() // DOM 加载完成
|
||||
page.MustWaitIdle() // 基本静止(减少早期误判)
|
||||
page.MustActivate() // 前置以便扫码
|
||||
cookieArr := getPageCookie(page, "https://cart.taobao.com/cart.htm?spm=tbpc.mytb_index.leftnav.1.6db2782d0TVVip")
|
||||
saveCookiesToFile(cookieArr, "account_cookie.json")
|
||||
browser.Close()
|
||||
}
|
||||
|
||||
func getPageCookie(page *rod.Page, url string) []*proto.NetworkCookieParam {
|
||||
cookieArr, _ := page.Cookies([]string{url})
|
||||
var cookies []*proto.NetworkCookieParam
|
||||
for _, cookie := range cookieArr {
|
||||
cookies = append(cookies, &proto.NetworkCookieParam{
|
||||
Name: cookie.Name,
|
||||
Value: cookie.Value,
|
||||
Domain: cookie.Domain,
|
||||
Path: cookie.Path,
|
||||
Expires: cookie.Expires, // 过期时间
|
||||
HTTPOnly: cookie.HTTPOnly, // 禁止 JS 访问
|
||||
Secure: cookie.Secure, // 仅 HTTPS 传输
|
||||
})
|
||||
}
|
||||
return cookies
|
||||
}
|
||||
|
||||
func saveCookiesToFile(cookies []*proto.NetworkCookieParam, filename string) error {
|
||||
data, err := json.MarshalIndent(cookies, "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(filename, data, 0644)
|
||||
}
|
||||
|
||||
func loadCookiesFromFile(filename string) ([]*proto.NetworkCookieParam, error) {
|
||||
data, err := os.ReadFile(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var cookies []*proto.NetworkCookieParam
|
||||
if err := json.Unmarshal(data, &cookies); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return cookies, nil
|
||||
}
|
||||
|
||||
// 获取指定接口的响应参数
|
||||
func getApiResponse(page *rod.Page, url string) string {
|
||||
// 定义一个通道接收消息
|
||||
ch := make(chan string)
|
||||
go page.EachEvent(func(e *proto.PageLoadEventFired) {
|
||||
log.Println("1234567890")
|
||||
}, func(e *proto.NetworkResponseReceived) {
|
||||
if strings.Contains(e.Response.URL, url) {
|
||||
reply, err := (proto.NetworkGetResponseBody{RequestID: e.RequestID}).Call(page)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
ch <- reply.Body
|
||||
// fmt.Println(reply.Body)
|
||||
}
|
||||
})()
|
||||
|
||||
select {
|
||||
case res := <-ch:
|
||||
return res
|
||||
case <-time.After(30 * time.Second):
|
||||
log.Println("等待上传响应超时")
|
||||
return ""
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user