first commit
This commit is contained in:
commit
5576528bcf
10 changed files with 386 additions and 0 deletions
152
main.go
Normal file
152
main.go
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
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!")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue