apexherbert200 commited on
Commit
cf7cbe0
·
1 Parent(s): e264582

Added middleware

Browse files
Files changed (1) hide show
  1. webrify2.py +56 -2
webrify2.py CHANGED
@@ -186,11 +186,63 @@ async def get_metadata(url: str):
186
  # finally:
187
  # await browser.close()
188
  # await pw.stop()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  @app.get("/screenshot", response_model=ScreenshotResponse)
190
  async def get_screenshot(url: str):
191
  page, browser, pw = await get_page(url)
192
  try:
193
- # Scroll to bottom to trigger lazy-loaded content
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  await page.evaluate("""
195
  () => {
196
  return new Promise((resolve) => {
@@ -208,11 +260,13 @@ async def get_screenshot(url: str):
208
  }
209
  """)
210
 
211
- # Give time for images and content to load
212
  await page.wait_for_timeout(2000)
213
 
 
214
  image_bytes = await page.screenshot(full_page=True)
215
  image_base64 = base64.b64encode(image_bytes).decode()
 
216
  return {"screenshot": image_base64}
217
  finally:
218
  await browser.close()
 
186
  # finally:
187
  # await browser.close()
188
  # await pw.stop()
189
+ # @app.get("/screenshot", response_model=ScreenshotResponse)
190
+ # async def get_screenshot(url: str):
191
+ # page, browser, pw = await get_page(url)
192
+ # try:
193
+ # # Scroll to bottom to trigger lazy-loaded content
194
+ # await page.evaluate("""
195
+ # () => {
196
+ # return new Promise((resolve) => {
197
+ # let totalHeight = 0;
198
+ # const distance = 100;
199
+ # const timer = setInterval(() => {
200
+ # window.scrollBy(0, distance);
201
+ # totalHeight += distance;
202
+ # if (totalHeight >= document.body.scrollHeight) {
203
+ # clearInterval(timer);
204
+ # resolve();
205
+ # }
206
+ # }, 100);
207
+ # });
208
+ # }
209
+ # """)
210
+
211
+ # # Give time for images and content to load
212
+ # await page.wait_for_timeout(2000)
213
+
214
+ # image_bytes = await page.screenshot(full_page=True)
215
+ # image_base64 = base64.b64encode(image_bytes).decode()
216
+ # return {"screenshot": image_base64}
217
+ # finally:
218
+ # await browser.close()
219
+ # await pw.stop()
220
+
221
  @app.get("/screenshot", response_model=ScreenshotResponse)
222
  async def get_screenshot(url: str):
223
  page, browser, pw = await get_page(url)
224
  try:
225
+ # Go to the page and wait until the network is idle
226
+ await page.goto(url, wait_until="networkidle", timeout=60000)
227
+
228
+ # Wait for the header (or similar element) to load
229
+ try:
230
+ await page.wait_for_selector("header", timeout=10000)
231
+ except:
232
+ pass # Don't fail if the header doesn't exist
233
+
234
+ # Remove sticky or fixed header issues before full-page screenshot
235
+ await page.add_style_tag(content="""
236
+ * {
237
+ scroll-behavior: auto !important;
238
+ }
239
+ header, .sticky, .fixed, [style*="position:fixed"] {
240
+ position: static !important;
241
+ top: auto !important;
242
+ }
243
+ """)
244
+
245
+ # Scroll down to trigger lazy loading
246
  await page.evaluate("""
247
  () => {
248
  return new Promise((resolve) => {
 
260
  }
261
  """)
262
 
263
+ # Wait to ensure lazy content and animations complete
264
  await page.wait_for_timeout(2000)
265
 
266
+ # Take full-page screenshot
267
  image_bytes = await page.screenshot(full_page=True)
268
  image_base64 = base64.b64encode(image_bytes).decode()
269
+
270
  return {"screenshot": image_base64}
271
  finally:
272
  await browser.close()