Compare commits
15 Commits
adb28dafe7
...
feature/ar
| Author | SHA1 | Date | |
|---|---|---|---|
| cc9c9354bc | |||
| 55ed1c1b36 | |||
| 8032850b0b | |||
| 5d5d90d3f6 | |||
| 7742a70f6c | |||
| 857aec79e3 | |||
| 10c80effce | |||
| b86fc071ec | |||
| 7b06c1b782 | |||
| e626e79882 | |||
| c1b6714d57 | |||
| fb48c6a9cc | |||
| d69bfe4590 | |||
| abf360a126 | |||
| cc3b454262 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,3 +3,5 @@ coverage/*
|
|||||||
test_monitor.txt
|
test_monitor.txt
|
||||||
bin
|
bin
|
||||||
.vscode
|
.vscode
|
||||||
|
.notes
|
||||||
|
bin
|
||||||
10
Makefile
10
Makefile
@@ -17,3 +17,13 @@ build:
|
|||||||
rm -rf ${BINARY_DIR}
|
rm -rf ${BINARY_DIR}
|
||||||
mkdir ${BINARY_DIR}
|
mkdir ${BINARY_DIR}
|
||||||
env GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -o ./${BINARY_DIR}/${BINARY_NAME} main.go
|
env GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -o ./${BINARY_DIR}/${BINARY_NAME} main.go
|
||||||
|
build_raspi:
|
||||||
|
rm -rf ${BINARY_DIR}
|
||||||
|
mkdir ${BINARY_DIR}
|
||||||
|
env GOOS=linux CGO_ENABLED=0 GOARCH=arm64 go build -o ./${BINARY_DIR}/${BINARY_NAME} main.go
|
||||||
|
build_freebsd:
|
||||||
|
rm -rf ${BINARY_DIR}
|
||||||
|
mkdir ${BINARY_DIR}
|
||||||
|
env GOOS=freebsd CGO_ENABLED=0 GOARCH=arm64 ENV=prod go build -o ./${BINARY_DIR}/${BINARY_NAME} main.go
|
||||||
|
list_build_types:
|
||||||
|
go tool dist list | grep arm
|
||||||
24
README.md
Normal file
24
README.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# go-wifi-switcher
|
||||||
|
## Huawei B2368-66
|
||||||
|
This software will turn wifi on/off based on current state.
|
||||||
|
|
||||||
|
Example: If wifi is **on** then it will turn **off**.
|
||||||
|
|
||||||
|
## How does it works
|
||||||
|
It uses web-scrapping thanks to amazing **[go-rod web scrapper](github.com/go-rod/rod)**
|
||||||
|
|
||||||
|
## How to use
|
||||||
|
You must build it using the `go build` command that better fits with the OS where this software will be consumed.
|
||||||
|
|
||||||
|
I'm using it on debian OS so I've created some build commands inside **[Makefile](https://gitea.urkob.com/urko/go-wifi-switcher/src/branch/main/Makefile)**
|
||||||
|
|
||||||
|
You can build and copy into your OS in `/usr/local/bin` for example, then create a cron task to automatically run this binary.
|
||||||
|
|
||||||
|
## Result
|
||||||
|
You can configure to switch **off** during **night** and **on** at **morning**. So you can get free of radiation while you sleep and don't have to manually switch on :)
|
||||||
|
|
||||||
|
## How to install and how to use
|
||||||
|
TODO
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
TODO
|
||||||
@@ -12,6 +12,7 @@ type Config struct {
|
|||||||
AdminUser string `required:"true" split_words:"true"`
|
AdminUser string `required:"true" split_words:"true"`
|
||||||
Password string `required:"true" split_words:"true"`
|
Password string `required:"true" split_words:"true"`
|
||||||
LogFile bool `required:"true" split_words:"true"`
|
LogFile bool `required:"true" split_words:"true"`
|
||||||
|
Bin string `required:"true" split_words:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewConfig(envFilePath string) *Config {
|
func NewConfig(envFilePath string) *Config {
|
||||||
|
|||||||
95
internal/providers/archer_ax50.go
Normal file
95
internal/providers/archer_ax50.go
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
package providers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-rod/rod"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ArcherAx50 struct {
|
||||||
|
passwordID string
|
||||||
|
loginButtonID string
|
||||||
|
wirelessTab string
|
||||||
|
chkWifi2gID string
|
||||||
|
saveButtonID string
|
||||||
|
page *rod.Page
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewArcherAx50(page *rod.Page) ArcherAx50 {
|
||||||
|
return ArcherAx50{
|
||||||
|
passwordID: "#login-password",
|
||||||
|
loginButtonID: "#login-btn",
|
||||||
|
wirelessTab: "wireless",
|
||||||
|
chkWifi2gID: "chk_enable_wireless_24g",
|
||||||
|
saveButtonID: "#total_save",
|
||||||
|
page: page,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p ArcherAx50) Login(user, pass string) error {
|
||||||
|
time.Sleep(time.Millisecond * 1250)
|
||||||
|
|
||||||
|
p.page.MustEvaluate(&rod.EvalOptions{
|
||||||
|
JS: `() => {
|
||||||
|
$("input.password-text").each((i,v) => {
|
||||||
|
v.click();
|
||||||
|
v.focus();
|
||||||
|
v.value="` + pass + `";
|
||||||
|
})
|
||||||
|
return '';
|
||||||
|
}`,
|
||||||
|
})
|
||||||
|
time.Sleep(time.Millisecond * 250)
|
||||||
|
|
||||||
|
log.Println(p.passwordID, "DONE")
|
||||||
|
|
||||||
|
login, err := p.page.Element(p.loginButtonID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.loginButtonID, err)
|
||||||
|
}
|
||||||
|
login.MustClick()
|
||||||
|
log.Println(p.loginButtonID, "DONE")
|
||||||
|
time.Sleep(time.Millisecond * 400)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p ArcherAx50) SwitchWIFI() error {
|
||||||
|
time.Sleep(time.Second * 1)
|
||||||
|
pageURL := p.page.MustInfo().URL
|
||||||
|
log.Println("p.page.MustInfo().URL", pageURL)
|
||||||
|
|
||||||
|
wirelessTab, err := p.page.Element(`[name="` + p.wirelessTab + `"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.wirelessTab, err)
|
||||||
|
}
|
||||||
|
wirelessTab.MustClick()
|
||||||
|
log.Println(p.wirelessTab, "DONE")
|
||||||
|
|
||||||
|
time.Sleep(time.Millisecond * 750)
|
||||||
|
checked := p.page.MustEvaluate(&rod.EvalOptions{
|
||||||
|
JS: `() => {
|
||||||
|
return document.getElementById('` + p.chkWifi2gID + `').checked;
|
||||||
|
}`,
|
||||||
|
})
|
||||||
|
|
||||||
|
isChecked := checked.Value.Bool()
|
||||||
|
p.page.MustEvaluate(&rod.EvalOptions{
|
||||||
|
JS: `() => {
|
||||||
|
document.getElementById('` + p.chkWifi2gID + `').checked=` + fmt.Sprint(!isChecked) + `;
|
||||||
|
return '';
|
||||||
|
}`,
|
||||||
|
})
|
||||||
|
|
||||||
|
log.Println(p.chkWifi2gID, "DONE")
|
||||||
|
saveButton, err := p.page.Element(p.saveButtonID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.saveButtonID, err)
|
||||||
|
}
|
||||||
|
saveButton.MustClick()
|
||||||
|
log.Println(p.saveButtonID, "DONE")
|
||||||
|
|
||||||
|
time.Sleep(time.Millisecond * 1500)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
112
internal/providers/huawei.go
Normal file
112
internal/providers/huawei.go
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
package providers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-rod/rod"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Huawei struct {
|
||||||
|
usernameID string
|
||||||
|
userpasswordID string
|
||||||
|
loginText string
|
||||||
|
skipText string
|
||||||
|
netID string
|
||||||
|
netWlanID string
|
||||||
|
mainFrameID string
|
||||||
|
wlanEnableID string
|
||||||
|
page *rod.Page
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewHuawei(page *rod.Page) Huawei {
|
||||||
|
return Huawei{
|
||||||
|
usernameID: "#username",
|
||||||
|
userpasswordID: "#userpassword",
|
||||||
|
loginText: "Login",
|
||||||
|
skipText: "Skip",
|
||||||
|
netID: "#Net",
|
||||||
|
netWlanID: "#Net-WLAN",
|
||||||
|
mainFrameID: "#mainFrame",
|
||||||
|
wlanEnableID: "#wlanEnable",
|
||||||
|
page: page,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p Huawei) Login(user, pass string) error {
|
||||||
|
username, err := p.page.Element(p.usernameID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.userpasswordID, err)
|
||||||
|
}
|
||||||
|
username.MustInput(user)
|
||||||
|
log.Println(p.usernameID, "DONE")
|
||||||
|
|
||||||
|
userpassword, err := p.page.Element(p.userpasswordID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.userpasswordID, err)
|
||||||
|
}
|
||||||
|
userpassword.MustInput(pass)
|
||||||
|
log.Println(p.userpasswordID, "DONE")
|
||||||
|
|
||||||
|
login, err := p.page.Element(`input[value="` + p.loginText + `"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.loginText, err)
|
||||||
|
}
|
||||||
|
login.MustClick()
|
||||||
|
log.Println(p.loginText, "DONE")
|
||||||
|
|
||||||
|
skip, err := p.page.Element(`input[value="` + p.skipText + `"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.skipText, err)
|
||||||
|
}
|
||||||
|
skip.MustClick()
|
||||||
|
log.Println(p.skipText, "DONE")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p Huawei) SwitchWIFI() error {
|
||||||
|
net, err := p.page.Element(p.netID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.netID, err)
|
||||||
|
}
|
||||||
|
net.MustClick()
|
||||||
|
log.Println(p.netID, "DONE")
|
||||||
|
|
||||||
|
netWlan, err := p.page.Element(p.netWlanID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.netWlanID, err)
|
||||||
|
}
|
||||||
|
netWlan.MustClick()
|
||||||
|
log.Println(p.netWlanID, "DONE")
|
||||||
|
|
||||||
|
frameElement, err := p.page.Element(p.mainFrameID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.mainFrameID, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
mainFrame, err := frameElement.Frame()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("frameElement.Frame: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wlanEnable, err := mainFrame.Element(p.wlanEnableID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("mainFrame.Element %s: %s", p.wlanEnableID, err)
|
||||||
|
}
|
||||||
|
wlanEnable.MustClick()
|
||||||
|
log.Println(p.wlanEnableID, "DONE")
|
||||||
|
|
||||||
|
sysSubmitID := "#sysSubmit"
|
||||||
|
sysSubmit, err := mainFrame.Element(sysSubmitID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("mainFrame.Element %s: %s", sysSubmitID, err)
|
||||||
|
}
|
||||||
|
sysSubmit.MustClick()
|
||||||
|
log.Println(sysSubmitID, "DONE")
|
||||||
|
|
||||||
|
// TODO: improve this and wait until something should happens (refresh)
|
||||||
|
time.Sleep(time.Second * 3)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
104
internal/providers/nucom.go
Normal file
104
internal/providers/nucom.go
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
package providers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-rod/rod"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Nucom struct {
|
||||||
|
usernameName string
|
||||||
|
passwordName string
|
||||||
|
loginSubmitID string
|
||||||
|
wirelessTabID string
|
||||||
|
wirelessMenuText string
|
||||||
|
configureWarningID string
|
||||||
|
wifiRadioID string
|
||||||
|
saveID string
|
||||||
|
radioOff string
|
||||||
|
radioOn string
|
||||||
|
page *rod.Page
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNucom(page *rod.Page) Nucom {
|
||||||
|
return Nucom{
|
||||||
|
usernameName: "loginUser",
|
||||||
|
passwordName: "loginPass",
|
||||||
|
loginSubmitID: "btnApply",
|
||||||
|
wirelessTabID: "menu_wireless",
|
||||||
|
wirelessMenuText: "Básico",
|
||||||
|
configureWarningID: "Configurar ahora",
|
||||||
|
wifiRadioID: "radiohiddenButton",
|
||||||
|
radioOff: "Apagada",
|
||||||
|
radioOn: "Encendida",
|
||||||
|
saveID: "basicApply",
|
||||||
|
page: page,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p Nucom) Login(user, pass string) error {
|
||||||
|
username, err := p.page.Element(`input[name="` + p.usernameName + `"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.passwordName, err)
|
||||||
|
}
|
||||||
|
username.MustInput(user)
|
||||||
|
log.Println(p.usernameName, "DONE")
|
||||||
|
|
||||||
|
userpassword, err := p.page.Element(`input[name="` + p.passwordName + `"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.passwordName, err)
|
||||||
|
}
|
||||||
|
userpassword.MustInput(pass)
|
||||||
|
log.Println(p.passwordName, "DONE")
|
||||||
|
|
||||||
|
login, err := p.page.Element(`input[id="` + p.loginSubmitID + `"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.loginSubmitID, err)
|
||||||
|
}
|
||||||
|
login.MustClick()
|
||||||
|
log.Println(p.loginSubmitID, "DONE")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p Nucom) SwitchWIFI() error {
|
||||||
|
wirelessMenu, err := p.page.Element(`a[id="` + p.wirelessTabID + `"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.wirelessTabID, err)
|
||||||
|
}
|
||||||
|
wirelessMenu.MustClick()
|
||||||
|
log.Println(p.wirelessTabID, "DONE")
|
||||||
|
time.Sleep(time.Millisecond * 500)
|
||||||
|
log.Println(p.page.MustInfo().URL)
|
||||||
|
|
||||||
|
offWifiRadio, err := p.page.Element(`input[type="radio"][name="radiohiddenButton"][value="0"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.wifiRadioID, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
offChecked := offWifiRadio.MustProperty("checked")
|
||||||
|
if offChecked.Bool() {
|
||||||
|
log.Println("it is off, let's switch on")
|
||||||
|
onRadio, err := p.page.Element(`input[type="radio"][name="radiohiddenButton"][value="1"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.wifiRadioID, err)
|
||||||
|
}
|
||||||
|
onRadio.MustClick()
|
||||||
|
} else {
|
||||||
|
log.Println("it is on, time to switch off")
|
||||||
|
offWifiRadio.MustClick()
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println(p.wifiRadioID, "DONE")
|
||||||
|
time.Sleep(time.Millisecond * 150)
|
||||||
|
|
||||||
|
saveButton, err := p.page.Element(`input[id="` + p.saveID + `"]`)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("page.Element %s: %s", p.saveID, err)
|
||||||
|
}
|
||||||
|
saveButton.MustClick()
|
||||||
|
log.Println(p.saveID, "DONE")
|
||||||
|
time.Sleep(time.Millisecond * 150)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
45
internal/switcher/switcher.go
Normal file
45
internal/switcher/switcher.go
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
package switcher
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"gitea.urkob.com/urko/go-wifi-switcher/cfg"
|
||||||
|
"gitea.urkob.com/urko/go-wifi-switcher/pkg/provider"
|
||||||
|
"github.com/go-rod/rod"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Switcher struct {
|
||||||
|
Browser *rod.Browser
|
||||||
|
Page *rod.Page
|
||||||
|
config *cfg.Config
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSwitcher(remoteControlBrowserUrl string, config *cfg.Config) Switcher {
|
||||||
|
browser := rod.New().
|
||||||
|
ControlURL(remoteControlBrowserUrl).
|
||||||
|
MustConnect().
|
||||||
|
MustIgnoreCertErrors(true)
|
||||||
|
|
||||||
|
page := browser.MustPage(config.Page)
|
||||||
|
|
||||||
|
return Switcher{
|
||||||
|
Browser: browser,
|
||||||
|
Page: page,
|
||||||
|
config: config,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Switcher) SwitchWIFI(prv provider.ProviderIface) error {
|
||||||
|
defer s.Browser.MustClose()
|
||||||
|
defer s.Page.Close()
|
||||||
|
|
||||||
|
if err := prv.Login(s.config.AdminUser, s.config.Password); err != nil {
|
||||||
|
return fmt.Errorf("prv.Login %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := prv.SwitchWIFI(); err != nil {
|
||||||
|
return fmt.Errorf("prv.SwitchWIFI %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
70
main.go
70
main.go
@@ -8,15 +8,20 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"gitea.urkob.com/urko/go-wifi-switcher/cfg"
|
"gitea.urkob.com/urko/go-wifi-switcher/cfg"
|
||||||
"github.com/go-rod/rod"
|
"gitea.urkob.com/urko/go-wifi-switcher/internal/providers"
|
||||||
|
"gitea.urkob.com/urko/go-wifi-switcher/internal/switcher"
|
||||||
"github.com/go-rod/rod/lib/launcher"
|
"github.com/go-rod/rod/lib/launcher"
|
||||||
"github.com/go-rod/rod/lib/utils"
|
"github.com/go-rod/rod/lib/utils"
|
||||||
"github.com/ysmood/leakless"
|
"github.com/ysmood/leakless"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
config := cfg.NewConfig("./.env")
|
envFile := ""
|
||||||
|
if os.Getenv("ENV") != "prod" {
|
||||||
|
envFile = "./.env"
|
||||||
|
}
|
||||||
|
|
||||||
|
config := cfg.NewConfig(envFile)
|
||||||
log.SetFlags(log.Lmicroseconds)
|
log.SetFlags(log.Lmicroseconds)
|
||||||
if config.LogFile {
|
if config.LogFile {
|
||||||
logFileName := fmt.Sprintf("%s.txt", time.Now().Format(strings.ReplaceAll(time.RFC1123Z, ":", "_")))
|
logFileName := fmt.Sprintf("%s.txt", time.Now().Format(strings.ReplaceAll(time.RFC1123Z, ":", "_")))
|
||||||
@@ -29,48 +34,33 @@ func main() {
|
|||||||
log.SetOutput(f)
|
log.SetOutput(f)
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the browser executable path
|
var lc *launcher.Launcher
|
||||||
path := launcher.NewBrowser().MustGet()
|
var remoteControlBrowserURL string
|
||||||
args := launcher.New().FormatArgs()
|
|
||||||
|
|
||||||
cmd := leakless.New().Command(path, args...)
|
log.Println("config", config)
|
||||||
|
if config.Bin != "" {
|
||||||
|
lc = launcher.New().Bin(config.Bin)
|
||||||
|
remoteControlBrowserURL = lc.MustLaunch()
|
||||||
|
log.Println("u = lc.MustLaunch()", remoteControlBrowserURL)
|
||||||
|
} else {
|
||||||
|
lc = launcher.New()
|
||||||
|
path := launcher.NewBrowser().MustGet()
|
||||||
|
args := lc.FormatArgs()
|
||||||
|
|
||||||
parser := launcher.NewURLParser()
|
cmd := leakless.New().Command(path, args...)
|
||||||
cmd.Stderr = parser
|
|
||||||
utils.E(cmd.Start())
|
|
||||||
u := launcher.MustResolveURL(<-parser.URL)
|
|
||||||
browser := rod.New().
|
|
||||||
ControlURL(u).
|
|
||||||
MustConnect().
|
|
||||||
MustIgnoreCertErrors(true)
|
|
||||||
|
|
||||||
defer browser.MustClose()
|
parser := launcher.NewURLParser()
|
||||||
|
cmd.Stderr = parser
|
||||||
|
utils.E(cmd.Start())
|
||||||
|
remoteControlBrowserURL = launcher.MustResolveURL(<-parser.URL)
|
||||||
|
}
|
||||||
|
|
||||||
page := browser.MustPage(config.Page)
|
sw := switcher.NewSwitcher(remoteControlBrowserURL, config)
|
||||||
|
prv := providers.NewArcherAx50(sw.Page)
|
||||||
page.MustElement(`#username`).MustInput(config.AdminUser)
|
err := sw.SwitchWIFI(prv)
|
||||||
page.MustElement(`#userpassword`).MustInput(config.Password)
|
if err != nil {
|
||||||
log.Println("INPUT DONE")
|
panic(err)
|
||||||
|
}
|
||||||
page.MustElement(`input[value="Login"]`).MustClick()
|
|
||||||
log.Println("LOGIN DONE")
|
|
||||||
|
|
||||||
page.MustElement(`input[value="Skip"]`).MustClick()
|
|
||||||
log.Println("SKIP DONE")
|
|
||||||
|
|
||||||
page.MustElement("#Net").MustClick()
|
|
||||||
log.Println("Net DONE")
|
|
||||||
|
|
||||||
page.MustElement("#Net-WLAN").MustClick()
|
|
||||||
log.Println("Net-WLAN DONE")
|
|
||||||
|
|
||||||
mainFrame := page.MustElement("#mainFrame").MustFrame()
|
|
||||||
mainFrame.MustElement("#wlanEnable").MustClick()
|
|
||||||
log.Println("wlanEnable DONE")
|
|
||||||
|
|
||||||
mainFrame.MustElement("#sysSubmit").MustClick()
|
|
||||||
// TODO: improve this and wait until something should happens (refresh)
|
|
||||||
time.Sleep(time.Second * 3)
|
|
||||||
|
|
||||||
log.Println("task completed")
|
log.Println("task completed")
|
||||||
}
|
}
|
||||||
|
|||||||
6
pkg/provider/provider.go
Normal file
6
pkg/provider/provider.go
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package provider
|
||||||
|
|
||||||
|
type ProviderIface interface {
|
||||||
|
Login(user, pass string) error
|
||||||
|
SwitchWIFI() error
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user