GitHub Actions Bot commited on
Commit
7efb4dc
·
1 Parent(s): 54f5453

Sync from GitHub main branch

Browse files
Files changed (1) hide show
  1. main.py +15 -10
main.py CHANGED
@@ -101,7 +101,6 @@ async def lifespan(app: FastAPI):
101
  app.state.browser = browser
102
  app.state.http_client = http_client
103
 
104
- # SINGLE WORKER
105
  app.state.worker_task = asyncio.create_task(screenshot_worker(app))
106
 
107
  except Exception as e:
@@ -174,19 +173,19 @@ async def capture_and_upload(url: str, zoom_value: float, browser: Browser, http
174
  page = None
175
 
176
  try:
 
177
  context = await browser.new_context(
178
- viewport={"width": 1600, "height": 1000},
179
- device_scale_factor=2,
180
  bypass_csp=True,
181
  java_script_enabled=True,
182
  )
183
  page = await context.new_page()
184
 
185
- # === FIXED ROUTE HANDLER (does NOT block fonts/icons) ===
186
  async def route_handler(route):
187
  try:
188
  r = route.request
189
- # Block only heavy/unused media (not fonts!)
190
  if r.resource_type in ["video", "media"]:
191
  await route.abort()
192
  else:
@@ -205,6 +204,7 @@ async def capture_and_upload(url: str, zoom_value: float, browser: Browser, http
205
 
206
  await page.evaluate(f"document.body.style.zoom = '{zoom_value}'")
207
 
 
208
  last_height = -1
209
  for _ in range(200):
210
  height = await page.evaluate(
@@ -218,6 +218,7 @@ async def capture_and_upload(url: str, zoom_value: float, browser: Browser, http
218
  break
219
  last_height = height
220
 
 
221
  await page.evaluate("""
222
  const items = document.querySelectorAll('.megaListItem, .file-block-sc');
223
  let i = 0;
@@ -251,7 +252,12 @@ async def capture_and_upload(url: str, zoom_value: float, browser: Browser, http
251
 
252
  await page.wait_for_timeout(1200)
253
 
254
- await page.screenshot(path=screenshot_path, type="jpeg", quality=90)
 
 
 
 
 
255
 
256
  except Exception as e:
257
  log.warning(f"Screenshot failed for {url}: {e}")
@@ -266,8 +272,9 @@ async def capture_and_upload(url: str, zoom_value: float, browser: Browser, http
266
  except:
267
  pass
268
 
 
269
  try:
270
- log.info(f"Screenshot captured, uploading: {url}")
271
 
272
  with open(screenshot_path, "rb") as fh:
273
  multipart = {"source": ("screenshot.jpg", fh, "image/jpeg")}
@@ -276,8 +283,6 @@ async def capture_and_upload(url: str, zoom_value: float, browser: Browser, http
276
 
277
  payload = resp.json()
278
 
279
- log.info(f"Upload done: {url}")
280
-
281
  if payload.get("status_code") == 200:
282
  return {"success": True, "url": payload["image"]["url"]}
283
 
@@ -289,7 +294,7 @@ async def capture_and_upload(url: str, zoom_value: float, browser: Browser, http
289
 
290
 
291
  # ---------------------------------------------------------
292
- # RUN: python main.py
293
  # ---------------------------------------------------------
294
 
295
  if __name__ == "__main__":
 
101
  app.state.browser = browser
102
  app.state.http_client = http_client
103
 
 
104
  app.state.worker_task = asyncio.create_task(screenshot_worker(app))
105
 
106
  except Exception as e:
 
173
  page = None
174
 
175
  try:
176
+ # UPDATED: Higher viewport + high DPI = clearer text at same zoom
177
  context = await browser.new_context(
178
+ viewport={"width": 2200, "height": 1400}, # Higher internal resolution
179
+ device_scale_factor=3, # HD clarity without heavy CPU
180
  bypass_csp=True,
181
  java_script_enabled=True,
182
  )
183
  page = await context.new_page()
184
 
185
+ # Do NOT block fonts or icons
186
  async def route_handler(route):
187
  try:
188
  r = route.request
 
189
  if r.resource_type in ["video", "media"]:
190
  await route.abort()
191
  else:
 
204
 
205
  await page.evaluate(f"document.body.style.zoom = '{zoom_value}'")
206
 
207
+ # Scroll fully
208
  last_height = -1
209
  for _ in range(200):
210
  height = await page.evaluate(
 
218
  break
219
  last_height = height
220
 
221
+ # Hover-effect load
222
  await page.evaluate("""
223
  const items = document.querySelectorAll('.megaListItem, .file-block-sc');
224
  let i = 0;
 
252
 
253
  await page.wait_for_timeout(1200)
254
 
255
+ # UPDATED: file size control + clarity
256
+ await page.screenshot(
257
+ path=screenshot_path,
258
+ type="jpeg",
259
+ quality=75 # Big size reduction, no visible clarity loss
260
+ )
261
 
262
  except Exception as e:
263
  log.warning(f"Screenshot failed for {url}: {e}")
 
272
  except:
273
  pass
274
 
275
+ # Upload
276
  try:
277
+ log.info(f"Uploading screenshot for {url}")
278
 
279
  with open(screenshot_path, "rb") as fh:
280
  multipart = {"source": ("screenshot.jpg", fh, "image/jpeg")}
 
283
 
284
  payload = resp.json()
285
 
 
 
286
  if payload.get("status_code") == 200:
287
  return {"success": True, "url": payload["image"]["url"]}
288
 
 
294
 
295
 
296
  # ---------------------------------------------------------
297
+ # RUN
298
  # ---------------------------------------------------------
299
 
300
  if __name__ == "__main__":