Khi bạn biết selenium mà muốn code 1 thứ j đó hay ho để có thể làm hộ bạn như “Tự động tham gia meeting online, săn sale, săn voucher” .Nhưng đa số các trang web sẽ phát hiện ra bạn đang chạy selenium. Vậy phải làm sao?
Mình code golang và đây là cách của mình.
Link tham khảo các bài viết:
https://ggqshr.github.io/2021-07-08/selenium-%E5%8F%8D%E5%8F%8D%E7%88%AC%E8%99%AB/
https://zhuanlan.zhihu.com/p/328768200
Bạn có 1 trang để test và kiểm tra điểu này:
Sau khi mình tham khảo bài viết khách và lần mò xem golang làm được không thì có tin vui trong “type Capabilities struct”
tham khảo khai báo trong bài viết này:
caps := selenium.Capabilities{"browserName": "chrome"}
chromeCaps := chrome.Capabilities{
Path: "",
Args: []string{
"--headless", // <<<
"--no-sandbox",
"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7",
},
}
caps.AddChrome(chromeCaps)
wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://127.0.0.1:%d", port))
Đây là code của mình
package automate_impl
import (
"github.com/tebeka/selenium"
"github.com/tebeka/selenium/chrome"
"san-voucher/helper/automate"
"san-voucher/log"
)
//var webDriver selenium.WebDriver
type Selenium struct {
Browser string
ConnectServer string
}
func NewSelenium(s *Selenium) automate.Automate {
return &Selenium{
Browser: s.Browser,
ConnectServer: s.ConnectServer,
}
}
func (s *Selenium) getRemote() (selenium.WebDriver, error) {
argsN := []string{"disable-blink-features=AutomationControlled",
"user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}
chromeCaps := chrome.Capabilities{
Path: "",
Args: argsN,
ExcludeSwitches: nil,
Extensions: nil,
LocalState: nil,
Prefs: nil,
Detach: nil,
DebuggerAddr: "",
MinidumpPath: "",
MobileEmulation: nil,
PerfLoggingPrefs: nil,
WindowTypes: nil,
AndroidPackage: "",
W3C: false,
}
caps := selenium.Capabilities(map[string]interface{}{"browserName": s.Browser})
caps.AddChrome(chromeCaps)
connect, err := selenium.NewRemote(caps, s.ConnectServer)
if err != nil {
log.Error(err.Error())
return nil, err
}
return connect, err
}
since https://github.com/tebeka/selenium is dead, please consider using https://github.com/go-auxiliaries/selenium instead