From 37f07d09afa022ac1f42bfc72745a897907baf49 Mon Sep 17 00:00:00 2001
From: kev <vimagick@gmail.com>
Date: Wed, 22 Feb 2023 18:38:45 +0800
Subject: [PATCH] update browserless

---
 browserless/README.md          | 73 ++++++++++++++++++++++++++--------
 browserless/docker-compose.yml | 29 +++++++-------
 2 files changed, 71 insertions(+), 31 deletions(-)

diff --git a/browserless/README.md b/browserless/README.md
index b5354a6..dc0ec4e 100644
--- a/browserless/README.md
+++ b/browserless/README.md
@@ -8,19 +8,21 @@ to.
 ## docker-compose.yml
 
 ```yaml
-browserless:
-  image: browserless/chrome:1-chrome-stable
-  ports:
-    - "3000:3000"
-  environment:
-    - DEBUG=browserless/chrome
-    - MAX_CONCURRENT_SESSIONS=10
-    - CONNECTION_TIMEOUT=600000
-    - MAX_QUEUE_LENGTH=10
-    - ENABLE_CORS=true
-    - CHROME_REFRESH_TIME=3600000
-  shm_size: 2gb
-  restart: always
+version: '3.8'
+services:
+  browserless:
+    image: browserless/chrome:1-chrome-stable
+    ports:
+      - "3000:3000"
+    environment:
+      - DEBUG=browserless/chrome
+      - MAX_CONCURRENT_SESSIONS=100
+      - CONNECTION_TIMEOUT=300000
+      - MAX_QUEUE_LENGTH=100
+      - ENABLE_CORS=true
+      - ENABLE_DEBUG_VIEWER=true
+      - EXIT_ON_HEALTH_FAILURE=true
+    restart: unless-stopped
 ```
 
 ## screenshot.js
@@ -28,30 +30,67 @@ browserless:
 ```javascript
 'use strict';
 
-const puppeteer = require('puppeteer');
+const puppeteer = require('puppeteer-core');
 
 (async() => {
   const browser = await puppeteer.connect({browserWSEndpoint: 'ws://localhost:3000'});
   const page = await browser.newPage();
+  await page.setViewport({width: 1280, height: 720});
   await page.goto('https://www.google.com/', {waitUntil: 'networkidle2'});
+  await page.waitForSelector('img[alt="Google"]');
   await page.screenshot({path: 'google.png', fullPage: true});
   await browser.close();
 })();
 ```
 
+## screenshot.py
+
+```python
+#!/usr/bin/env python
+
+from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.support import expected_conditions as EC
+
+options = webdriver.ChromeOptions()
+options.add_argument("--window-size=1024,768")
+options.add_argument('--headless')
+options.add_argument('--no-sandbox')
+
+driver = webdriver.Remote(
+    command_executor='http://localhost:3000/webdriver',
+    options=options
+)
+
+driver.get('https://www.google.com/')
+
+WebDriverWait(driver, 10).until(
+    EC.presence_of_element_located((By.CSS_SELECTOR, 'img[alt="Google"]'))
+)
+
+driver.save_screenshot('google.png')
+driver.close()
+driver.quit()
+```
+
 ## Up and Running
 
 ```bash
 $ docker-compose up -d
-$ PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm install puppeteer
 
+$ npm install puppeteer-core
 $ node screenshot.js
 $ imgcat google.png
 
+$ pip install selenium
+$ python screenshot.py
+$ imgcat google.png
+
 $ http http://127.0.0.1:3000/screenshot \
        url=https://www.youtube.com \
-       options:='{"fullPage":true}' \
-       gotoOptions:='{"waitUntil":"networkidle2"}' > youtube.png
+       options[fullPage]:=true \
+       gotoOptions[waitUntil]=networkidle2 > youtube.png
 $ imgcat youtube.png
 ```
 
diff --git a/browserless/docker-compose.yml b/browserless/docker-compose.yml
index a58702b..09585b6 100644
--- a/browserless/docker-compose.yml
+++ b/browserless/docker-compose.yml
@@ -1,14 +1,15 @@
-browserless:
-  image: browserless/chrome:1-chrome-stable
-  ports:
-    - "3000:3000"
-  environment:
-    - DEBUG=browserless/chrome
-    - MAX_CONCURRENT_SESSIONS=10
-    - CONNECTION_TIMEOUT=600000
-    - MAX_QUEUE_LENGTH=10
-    - CHROME_REFRESH_TIME=3600000
-    - ENABLE_CORS=true
-    - EXIT_ON_HEALTH_FAILURE=true
-  shm_size: 2gb
-  restart: always
+version: '3.8'
+services:
+  browserless:
+    image: browserless/chrome:1-chrome-stable
+    ports:
+      - "3000:3000"
+    environment:
+      - DEBUG=browserless/chrome
+      - MAX_CONCURRENT_SESSIONS=100
+      - CONNECTION_TIMEOUT=300000
+      - MAX_QUEUE_LENGTH=100
+      - ENABLE_CORS=true
+      - ENABLE_DEBUG_VIEWER=true
+      - EXIT_ON_HEALTH_FAILURE=true
+    restart: unless-stopped