152 lines
3.4 KiB
Go
152 lines
3.4 KiB
Go
package main
|
|
|
|
import (
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"git.readonly.ch/bouzoure/lecourrier-daily/helpers"
|
|
"github.com/playwright-community/playwright-go"
|
|
)
|
|
|
|
func main() {
|
|
urlMainPage := "https://lecourrier.ch"
|
|
urlDownload := "https://lecourrier.ch/edition-du-jour/"
|
|
sleepAfterLogin := 5
|
|
|
|
log := helpers.GetLogger()
|
|
log.Info("Welcome!")
|
|
|
|
config, err := helpers.GetConfig()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
installOptions := playwright.RunOptions{
|
|
Browsers: []string{"firefox"},
|
|
Verbose: false,
|
|
}
|
|
|
|
log.Info("Installing headless firefox (if needed)")
|
|
err = playwright.Install(&installOptions)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
options := playwright.BrowserTypeLaunchOptions{
|
|
Headless: playwright.Bool(!config.Debug.DisableHeadless),
|
|
}
|
|
|
|
log.Info("Starting playwright")
|
|
pw, err := playwright.Run()
|
|
if err != nil {
|
|
log.Fatalf("could not start playwright: %v", err)
|
|
}
|
|
|
|
log.Info("Starting headless firefox")
|
|
browser, err := pw.Firefox.Launch(options)
|
|
if err != nil {
|
|
log.Fatalf("could not launch browser: %v", err)
|
|
}
|
|
|
|
log.Info("Creating new page")
|
|
page, err := browser.NewPage()
|
|
if err != nil {
|
|
log.Fatalf("could not create page: %v", err)
|
|
}
|
|
|
|
log.Infof("Navigating to %s", urlMainPage)
|
|
if _, err = page.Goto(urlMainPage); err != nil {
|
|
log.Fatalf("could not goto: %v", err)
|
|
}
|
|
|
|
log.Info("Waiting for cookie popup")
|
|
for {
|
|
count, err := page.Locator(".cmplz-accept").Count()
|
|
if err == nil && count > 0 {
|
|
break
|
|
}
|
|
}
|
|
|
|
log.Info("Accepting cookies")
|
|
if err = page.Locator(".cmplz-accept").Click(); err != nil {
|
|
log.Fatalf("could not click: %v", err)
|
|
}
|
|
|
|
log.Info("Opening login box")
|
|
if err = page.Locator("#undefined-1 button").Click(); err != nil {
|
|
log.Fatalf("could not click: %v", err)
|
|
}
|
|
|
|
log.Info("Waiting for login form")
|
|
for {
|
|
count, err := page.Locator("form input[type=text]").Count()
|
|
if err == nil && count > 0 {
|
|
break
|
|
}
|
|
}
|
|
|
|
log.Info("Filling username")
|
|
err = page.Locator("form input[type=text]").Fill(config.Website.Username)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Info("Filling password")
|
|
err = page.Locator("form input[type=password]").Fill(config.Website.Password)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Info("Logging in")
|
|
err = page.GetByRole(*playwright.AriaRoleButton, playwright.PageGetByRoleOptions{
|
|
Name: "Se connecter",
|
|
}).Click()
|
|
if err != nil {
|
|
log.Fatalf("could not click: %v", err)
|
|
}
|
|
|
|
log.Infof("Waiting %d seconds", sleepAfterLogin)
|
|
time.Sleep(time.Duration(sleepAfterLogin) * time.Second)
|
|
|
|
log.Infof("Navigating to %s", urlDownload)
|
|
_, err = page.Goto(urlDownload)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Info("Waiting for download button")
|
|
for {
|
|
count, err := page.Locator("#download-pdf-hover").Count()
|
|
if err == nil && count > 0 {
|
|
break
|
|
}
|
|
}
|
|
|
|
log.Info("Clicking download button and expecting download")
|
|
download, err := page.ExpectDownload(func() error {
|
|
return page.Locator("#download-pdf-hover").Click()
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
location := filepath.Join(config.DownloadLocation, download.SuggestedFilename())
|
|
|
|
log.Info("Saving PDF", "location", location)
|
|
err = download.SaveAs(location)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Info("Closing browser and stopping playwright")
|
|
|
|
if err = browser.Close(); err != nil {
|
|
log.Fatalf("could not close browser: %v", err)
|
|
}
|
|
|
|
if err = pw.Stop(); err != nil {
|
|
log.Fatalf("could not stop Playwright: %v", err)
|
|
}
|
|
|
|
log.Info("Goodbye!")
|
|
}
|