Files
BordroRobot/app/lib/bot/rodhelper.go
2024-04-03 17:21:21 +03:00

111 lines
2.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package bot
import (
"fmt"
"time"
"github.com/go-rod/rod"
"github.com/go-rod/rod/lib/proto"
)
type Select struct {
Element *rod.Element
Selector string
}
func (elemSelector *Select) SelectItem(changeValue string) error {
_, err := elemSelector.Element.Evaluate(rod.Eval(`()=>{document.querySelector("` + elemSelector.Selector + `").value = "` + changeValue + `";}`))
_, err = elemSelector.Element.Evaluate(rod.Eval(`()=>{document.querySelector("` + elemSelector.Selector + `").dispatchEvent(new Event('change'));}`))
return err
}
func WaitLoad(frm *rod.Page) error { // belli bir süre redirect ten önceki js fonksiyonunun tamamlanması bekleniyor
wait := frm.WaitRequestIdle(100*time.Millisecond, nil, nil, nil)
wait()
err := frm.WaitLoad()
return err
}
func ReceiveDOMMessages(page *rod.Page, selector string, searchValue string) (string, error) {
// Tek bir öğe alınması, hata durumunu kontrol etmek için
elemd := page.MustElements(selector)
// Eğer elem boş ise, yani nil ise, hata döndür
if len(elemd) == 0 {
err := fmt.Errorf("Sellector Bulunamadı: %v", selector)
return "", err
}
elem := page.MustElement(selector)
// Eğer elem boş ise, yani nil ise, hata döndür
if elem == nil {
err := fmt.Errorf("Sellector Bulunamadı: %v", selector)
return "", err
}
// Öğenin metnini al
//text := elem.MustEval(fmt.Sprintf(`() => this.%s`, searchValue)).String()
// text := elem.MustEval(`() => this.innerText`).String()
text := elem.MustEval(fmt.Sprintf(`() => this.%s`, searchValue)).String()
return text, nil
}
func FillInput(frm *rod.Page, selector string, value string) error {
el, err := frm.Element(selector)
if err != nil {
return err
}
err = el.Input(value)
return err
}
func ClickItem(frm *rod.Page, selector string, clickCount int) error {
// Sayfadan ilgili öğeyi bul
el, err := frm.Element(selector)
err = el.WaitLoad()
if err != nil {
return err
}
err = el.Click(proto.InputMouseButtonLeft, clickCount)
return err
}
func Wait(frm *rod.Page, millisecond time.Duration) {
wait := frm.WaitRequestIdle(millisecond*time.Millisecond, nil, nil, nil)
wait()
}
func CloseBrowser(browser *rod.Browser) {
browser.Close()
}
func (l *Luca) GetPageByUrl(url string) (*rod.Page, error) {
allPages, err := l.Page.Browser().Pages()
if err != nil {
return nil, err
}
return allPages.FindByURL("https://auygs.luca.com.tr/Luca/luca.do")
}
func (l *Luca) GetFrame(page *rod.Page, selector string) (*rod.Page, error) {
err := page.WaitLoad()
if err != nil {
return nil, err
}
frm, err := page.Element(selector)
if err != nil {
return nil, err
}
frame, err := frm.Frame()
return frame, nil
}
// func (elemSelector *Select) MultipleEvalute(changeValue []string) error {
// for i := 0; i < len(changeValue); i++ {
// _, err := elemSelector.Element.Evaluate(rod.Eval(changeValue[i]))
// if err != nil {
// return err
// }
// }
// return nil
// }