This commit is contained in:
zyj
2025-10-14 17:56:28 +08:00
commit 81c18c94e3
74 changed files with 12668 additions and 0 deletions

109
libs/chrome.go Normal file
View File

@@ -0,0 +1,109 @@
package libs
import (
"log"
"path/filepath"
"strconv"
"github.com/go-rod/rod"
"github.com/go-rod/rod/lib/launcher"
"github.com/go-rod/rod/lib/proto"
"github.com/go-rod/stealth"
)
type Chrome struct{}
func (c *Chrome) Create(accountId int, params *Fingerprint) (*rod.Browser, string, *rod.Page) {
var accountIdStr = strconv.Itoa(accountId)
userDataDir := "user-data/" + accountIdStr
absPath, _ := filepath.Abs(userDataDir)
log.Printf("用户数据目录: %s", absPath)
path, _ := launcher.LookPath() // 获取当前系统的浏览器目录
// 判断是否传递代理
// var proxyHandle utils.ProxyHandle
// protocol, username, password, ip, port, errProxy := proxyHandle.ParseProxy(params.Proxy)
// ipInfo := external.GetIpInfo(strings.TrimSpace(string(params.Proxy)))
l := launcher.New().
Bin(path).
// Proxy("210.51.27.121:50003"). // 直接传入完整认证URL
Delete("use-mock-keychain"). // delete flag "--use-mock-keychain"
Set("disable-blink-features", "AutomationControlled"). // 绕过自动化检测
// Set("incognito"). // 无痕模式
Set("user-data-dir", absPath). // 数据持久化目录
Set("window-size", "1920,1480"). // 窗口尺寸
Set("disable-infobars", "true"). // 隐藏自动化提示栏
Set("no-sandbox", "true").
Set("excludeSwitches", "enable-automation").
Set("enable-gpu"). // 启用 GPU 加速
Set("ignore-certificate-errors"). // 忽略证书错误
Set("use-fake-ui-for-media-stream"). // 允许媒体流
Set("autoplay-policy", "no-user-gesture-required"). // 自动播放
Set("ignore-certificate-errors").
Set("disable-application-cache").
Set("disable-dev-shm-usage").
// 禁用webrtc
Set("disable-webrtc", "true"). // 核心禁用参数
Set("disable-features", "WebRtcHideLocalIpsWithMdns"). // 隐藏本地IP
Set("webrtc-ip-handling-policy", "disable_non_proxied_udp"). // 禁用非代理UDP
Set("force-webrtc-ip-handling-policy").
Headless(false) // 关闭无头模式
// 修改语言
l.Set("lang", "en-US")
l.Set("accept-lang", "en-US")
// // 修改时区
// l.Set("timezone", ipInfo.Timezone)
// l.Set("disable-geolocation", "true") // 启用地理定位API
// l.Set("disable-web-security", "true") // 允许跨域(某些网站需要)
// l.Set("disable-notifications", "true")
// // 设置环境变量 - 核心时区设置
// l.Env(append(os.Environ(), "TZ="+ipInfo.Timezone)...)
// l.
// Set("timezone", ipInfo.Timezone).
// Set("geolocation", ipInfo.Lat+","+ipInfo.Lon)
// if errProxy == nil {
// if strings.Contains(protocol, "http") {
// log.Println(protocol + "://" + ip + ":" + port)
// l = l.Proxy(ip + ":" + port)
// }
// }
uri := l.MustLaunch()
browser := rod.New().
ControlURL(uri).
MustConnect().NoDefaultDevice()
browser.MustIgnoreCertErrors(true)
// if errProxy == nil {
// if strings.Contains(protocol, "http") {
// log.Println(username, password)
// go browser.MustHandleAuth(username, password)()
// }
// }
page := stealth.MustPage(browser)
// page := browser.MustPage()
go browser.EachEvent(func(e *proto.TargetTargetCreated) {
if e.TargetInfo.Type != proto.TargetTargetInfoTypePage {
return
}
browser.MustPageFromTargetID(e.TargetInfo.TargetID).MustEvalOnNewDocument(stealth.JS)
})()
// // 在页面加载前注入时区覆盖代码
// var browserFingerprint browserfingerprint.BrowserFingerprint
// page = browserFingerprint.SetBrowserFingerprint(page, &paramsTypes.BrowserFingerprintParams{
// Canvas: true,
// TimeZone: ipInfo.Timezone, // 太平洋时间 (UTC-8)
// Language: "en-US",
// GeoLocation: ipInfo.Lat + "," + ipInfo.Lon, // 洛杉矶坐标
// })
page.MustSetViewport(1920, 1480, 1.0, false)
return browser, uri, page
}