package main
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"strings"
"time"
"github.com/chromedp/chromedp"
)
func main() {
baseURL := strings.TrimRight(os.Getenv("SURFSKY_API_BASE_URL"), "/")
req, _ := http.NewRequest(http.MethodPost, baseURL+"/profiles/one_time", strings.NewReader("{}"))
req.Header.Set("X-Cloud-Api-Token", os.Getenv("SURFSKY_API_TOKEN"))
req.Header.Set("Content-Type", "application/json")
resp, err := (&http.Client{Timeout: 120 * time.Second}).Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
log.Fatalf("start: HTTP %d", resp.StatusCode)
}
var session struct {
InternalUUID string `json:"internal_uuid"`
WSURL string `json:"ws_url"`
}
if err := json.NewDecoder(resp.Body).Decode(&session); err != nil {
log.Fatal(err)
}
defer stopSession(baseURL, session.InternalUUID)
allocator, cancelAllocator := chromedp.NewRemoteAllocator(context.Background(), session.WSURL, chromedp.NoModifyURL)
defer cancelAllocator()
ctx, cancel := chromedp.NewContext(allocator)
defer cancel()
var title string
if err := chromedp.Run(ctx,
chromedp.Navigate("https://example.com"),
chromedp.Title(&title),
); err != nil {
log.Println(err)
return
}
fmt.Println(title)
}
func stopSession(baseURL, internalUUID string) {
req, _ := http.NewRequest(http.MethodPost, baseURL+"/profiles/"+internalUUID+"/stop", nil)
req.Header.Set("X-Cloud-Api-Token", os.Getenv("SURFSKY_API_TOKEN"))
resp, err := (&http.Client{Timeout: 30 * time.Second}).Do(req)
if err != nil {
log.Println("stop:", err)
return
}
resp.Body.Close()
if resp.StatusCode != http.StatusOK {
log.Printf("stop: HTTP %d", resp.StatusCode)
}
}