Luna 是一款强大的第三方库,专为抗指纹自动化爬虫而设计。
原项目地址:GitHub - musiclover789/luna: Luna-抗指纹浏览器|爬虫|防反爬虫框架|浏览器指纹|自动化浏览器|防识别|反识别|爬虫框架
功能亮点
-
强大的抗指纹技术: Luna 提供了先进的抗指纹技术,使您的爬虫程序难以被识别。
-
视觉特征解析: 基于视觉特征的页面解析和操作,使爬虫更智能。
-
简单易用的接口: Luna 提供简单易用的接口,轻松集成和使用它的功能。
-
智能化行为模拟: 模拟用户行为,有效应对现代爬虫检测技术。
-
绕过检测技术: 具备绕过常见爬虫检测技术的能力,确保您的爬虫不容易被拦截。
package test_case
import (
"fmt"
"luna/base_devtools/input"
"luna/base_devtools/page"
"luna/base_devtools/runtime"
"luna/devtools"
"luna/luna_utils"
"luna/protocol"
"luna/script"
"testing"
"time"
)
func TestBaidu(t *testing.T) {
luna_utils.KillProcess()
/********************************/
chromiumPath := ""
browserObj := devtools.NewBrowser(chromiumPath, &devtools.BrowserOptions{
CachePath: luna_utils.CreateCacheDirInSubDir("/Users/Documents/golang/cache"),
ImgPath: "/Users/Documents/luna/test_img/baidu_img",
Headless: false,
//ProxyStr: "https://APM5TV:9BFF4D11@10.179.160.60:39349",
//Fingerprint: []string{"fingerprint1", "fingerprint2"},
WindowSize: &devtools.WindowSize{
Width: 1496,
Height: 967,
},
})
//&{2 1496 967 1496 858}
fmt.Println()
browserObj.DevToolsConn.ShowLog(false)
err, itemPage := browserObj.OpenPageAndListen("url", func(devToolsConn *protocol.DevToolsConn) {
//第一个处理
devToolsConn.ShowLog(true)
page.PageEnable(devToolsConn)
devToolsConn.SubscribeOneTimeEvent("Page.loadEventFired", func(param interface{}) {
runtime.Evaluate(devToolsConn, script.ShowMousePosition())
})
devToolsConn.SubscribeOneTimeEvent("Page.windowOpen", func(param interface{}) {
runtime.Evaluate(devToolsConn, script.ShowMousePosition())
})
})
if err == nil {
itemPage.RunJS(script.ShowMousePosition())
itemPage.DevToolsConn.ReduceSpeed(10)
err, ok := itemPage.WaitForMatchOnPageSync("home.png", 0.5, time.Second*20)
if err == nil && ok {
fmt.Println("说明、页面已经成功打开")
//time.Sleep(time.Hour)
err, imageCoordinates := itemPage.SimilarityWithMargin("home.png", 50, 200, 10, 10, time.Minute)
if err == nil && imageCoordinates.MatchScore > 0.5 {
targetX, targetY := imageCoordinates.RandomX, imageCoordinates.RandomY
itemPage.SimulateMouseMoveOnPage(luna_utils.RandomInRange(-1, devtools.BrowserGlobal.ScreenAvailWidth), -1, targetX, targetY)
itemPage.SimulateMouseClickOnPage(targetX, targetY)
itemPage.SimulateKeyboardInputOnPage("随便")
//点击按钮
err, imageCoordinates := itemPage.ImageSimilarity("button_01.png", time.Minute)
if err == nil && imageCoordinates.MatchScore > 0.5 {
itemPage.SimulateMouseMoveOnPage(targetX, targetY, imageCoordinates.RandomX, imageCoordinates.RandomY)
itemPage.SimulateMouseClickOnPage(imageCoordinates.RandomX, imageCoordinates.RandomY)
}
//滚动到页面底部
fmt.Println("~~~~~~~~~~>==============<~~~~~~~~~~~~~~")
err, ok := itemPage.ScrollToTargetImagePosition(imageCoordinates.RandomX, imageCoordinates.RandomY, input.DOWN, "bottom.png", 0.5, time.Minute)
fmt.Println(ok, err)
itemPage.Close()
browserObj.Close()
}
}
fmt.Println("~~~~~~~~~~>==============<~~~~~~~~~~~~~~")
} else {
fmt.Println(err, "错误了")
}
/********************************/
time.Sleep(1 * time.Minute)
}