Fixed error when taking screenshots

We must improve the screenshot to the comments (I do not have time to do if someone does it would be good)

If the video generation fails, re-launch it, as it depends on the network and machine you have, it will be more or less likely to fail.
pull/2151/head
Mohamed B. 12 months ago committed by GitHub
parent 3d4c34d60c
commit 097e29bbd2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -73,7 +73,7 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
with sync_playwright() as p: with sync_playwright() as p:
print_substep("Launching Headless Browser...") print_substep("Launching Headless Browser...")
browser = p.chromium.launch( browser = p.firefox.launch(
headless=True headless=True
) # headless=False will show the browser for debugging purposes ) # headless=False will show the browser for debugging purposes
# Device scale factor (or dsf for short) allows us to increase the resolution of the screenshots # Device scale factor (or dsf for short) allows us to increase the resolution of the screenshots
@ -99,6 +99,7 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
page.goto("https://www.reddit.com/login", timeout=0) page.goto("https://www.reddit.com/login", timeout=0)
page.set_viewport_size(ViewportSize(width=1920, height=1080)) page.set_viewport_size(ViewportSize(width=1920, height=1080))
page.wait_for_load_state() page.wait_for_load_state()
page.wait_for_timeout(timeout=500)
page.locator(f'input[name="username"]').fill(settings.config["reddit"]["creds"]["username"]) page.locator(f'input[name="username"]').fill(settings.config["reddit"]["creds"]["username"])
page.locator(f'input[name="password"]').fill(settings.config["reddit"]["creds"]["password"]) page.locator(f'input[name="password"]').fill(settings.config["reddit"]["creds"]["password"])
@ -160,10 +161,13 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
reddit_object["thread_title"], reddit_object["thread_title"],
to_language=lang, to_language=lang,
translator="google", translator="google",
) )
page.wait_for_timeout(2000) #small delay
page.wait_for_selector('shreddit-post > h1', timeout=5000) # we wait for the title to appere
page.evaluate( page.evaluate(
"tl_content => document.querySelector('[data-adclicklocation=\"title\"] > div > div > h1').textContent = tl_content", "tl_content => document.querySelector('shreddit-post > h1').textContent = tl_content",
texts_in_tl, texts_in_tl,
) )
else: else:
@ -177,12 +181,12 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
# zoom the body of the page # zoom the body of the page
page.evaluate("document.body.style.zoom=" + str(zoom)) page.evaluate("document.body.style.zoom=" + str(zoom))
# as zooming the body doesn't change the properties of the divs, we need to adjust for the zoom # as zooming the body doesn't change the properties of the divs, we need to adjust for the zoom
location = page.locator('[data-test-id="post-content"]').bounding_box() location = page.locator('shreddit-post').bounding_box()
for i in location: for i in location:
location[i] = float("{:.2f}".format(location[i] * zoom)) location[i] = float("{:.2f}".format(location[i] * zoom))
page.screenshot(clip=location, path=postcontentpath) page.screenshot(clip=location, path=postcontentpath)
else: else:
page.locator('[data-test-id="post-content"]').screenshot(path=postcontentpath) page.locator('shreddit-post').screenshot(path=postcontentpath)
except Exception as e: except Exception as e:
print_substep("Something went wrong!", style="red") print_substep("Something went wrong!", style="red")
resp = input( resp = input(
@ -220,7 +224,7 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
if page.locator('[data-testid="content-gate"]').is_visible(): if page.locator('[data-testid="content-gate"]').is_visible():
page.locator('[data-testid="content-gate"] button').click() page.locator('[data-testid="content-gate"] button').click()
page.goto(f"https://new.reddit.com/{comment['comment_url']}") page.goto(f"https://new.reddit.com{comment['comment_url']}")
# translate code # translate code
@ -230,30 +234,63 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
translator="google", translator="google",
to_language=settings.config["reddit"]["thread"]["post_lang"], to_language=settings.config["reddit"]["thread"]["post_lang"],
) )
page.wait_for_timeout(timeout=1500)
page.evaluate( page.evaluate(
'([tl_content, tl_id]) => document.querySelector(`#t1_${tl_id} > div:nth-child(2) > div > div[data-testid="comment"] > div`).textContent = tl_content', '([tl_content, tl_id]) => document.querySelector(`#t1_${tl_id}-comment-rtjson-content > div:nth-child(1) > p`).textContent = tl_content',
[comment_tl, comment["comment_id"]], [comment_tl, comment["comment_id"]],
) )
try: try:
if settings.config["settings"]["zoom"] != 1: if settings.config["settings"]["zoom"] != 1:
# store zoom settings if settings.config["settings"]["zoom"] != 1:
# Store zoom settings
zoom = settings.config["settings"]["zoom"] zoom = settings.config["settings"]["zoom"]
# zoom the body of the page
page.evaluate("document.body.style.zoom=" + str(zoom)) # Zoom the body of the page
# scroll comment into view page.evaluate(f"document.body.style.zoom = {zoom}")
page.locator(f"#t1_{comment['comment_id']}").scroll_into_view_if_needed()
# as zooming the body doesn't change the properties of the divs, we need to adjust for the zoom # Scroll the parent of the comment into view
location = page.locator(f"#t1_{comment['comment_id']}").bounding_box() parent_locator = page.locator(f"#t1_{comment['comment_id']}-comment-rtjson-content").locator('xpath=..')
for i in location: parent_locator.scroll_into_view_if_needed()
location[i] = float("{:.2f}".format(location[i] * zoom))
page.screenshot( # Get the bounding box of the parent element
clip=location, location = parent_locator.bounding_box()
path=f"assets/temp/{reddit_id}/png/comment_{idx}.png",
) # Ensure bounding box is valid
if location:
# Adjust for zoom (since zooming doesn't change the div's actual properties)
location['x'] = float("{:.2f}".format(location['x'] * zoom))
location['y'] = float("{:.2f}".format(location['y'] * zoom))
location['width'] = float("{:.2f}".format(location['width'] * zoom))
location['height'] = float("{:.2f}".format(location['height'] * zoom))
# Adjust the height to be exactly 200px
location['height'] = 200
# Take a screenshot of the parent element with the adjusted height
page.screenshot(
clip=location,
path=f"assets/temp/{reddit_id}/png/comment_{idx}_parent.png",
)
else:
print("Could not get the bounding box of the parent element.")
else: else:
page.locator(f"#t1_{comment['comment_id']}").screenshot( # getting the bounding_box
path=f"assets/temp/{reddit_id}/png/comment_{idx}.png" parent_locator = page.locator(f"#t1_{comment['comment_id']}-comment-rtjson-content").locator('xpath=..')
) location = parent_locator.bounding_box()
# bounding_box is valid ?
if location:
# ajust 200px
location['height'] = 200
# make screenshot
page.screenshot(
path=f"assets/temp/{reddit_id}/png/comment_{idx}.png",
clip=location # resize to 200px
)
else:
print("No se pudo obtener el cuadro delimitador del elemento.")
except TimeoutError: except TimeoutError:
del reddit_object["comments"] del reddit_object["comments"]
screenshot_num += 1 screenshot_num += 1

Loading…
Cancel
Save