[screenshot_download] make sure comment is visible before screenshot:

- set_preferred_theme on comment page
 - click view_more_comments if visiible
 - expand comment if not visible
pull/1978/head
Giuseppe Di Mauro 2 years ago
parent 7359d7b33f
commit c6564e1084

@ -51,6 +51,12 @@ def bypass_see_this_post_in(page):
if backdrop_loc.count() > 0: if backdrop_loc.count() > 0:
backdrop_loc.evaluate('node => node.style.display="none"') backdrop_loc.evaluate('node => node.style.display="none"')
def get_comment_excerpt(comment):
comment_excerpt = (comment["comment_body"].split("\n")[0])
if len(comment_excerpt) > 80: comment_excerpt = comment_excerpt[:80] + ""
return comment_excerpt
def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int): def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
"""Downloads screenshots of reddit posts as seen on the web. Downloads to assets/temp/png """Downloads screenshots of reddit posts as seen on the web. Downloads to assets/temp/png
@ -135,6 +141,8 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
print_substep("Logging in to Reddit...") print_substep("Logging in to Reddit...")
page = context.new_page() page = context.new_page()
screenshot_debug = True
# Use old.reddit.com to login only (go to reddit.com for actual posts/comments later) # Use old.reddit.com to login only (go to reddit.com for actual posts/comments later)
page.goto("https://old.reddit.com/login", timeout=0) page.goto("https://old.reddit.com/login", timeout=0)
# page.set_viewport_size(ViewportSize(width=1920, height=1080)) # page.set_viewport_size(ViewportSize(width=1920, height=1080))
@ -182,10 +190,10 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
# Try to set preferred theme from settings # Try to set preferred theme from settings
set_preferred_theme(settings.config["settings"]["theme"], page) set_preferred_theme(settings.config["settings"]["theme"], page)
# Bypass "See this post in..." # Bypass "See this post in..."
bypass_see_this_post_in(page) bypass_see_this_post_in(page)
if page.locator( if page.locator(
"#t3_12hmbug > div > div._3xX726aBn29LDbsDtzr_6E._1Ap4F5maDtT1E1YuCiaO0r.D3IL3FD0RFy_mkKLPwL4 > div > div > button" "#t3_12hmbug > div > div._3xX726aBn29LDbsDtzr_6E._1Ap4F5maDtT1E1YuCiaO0r.D3IL3FD0RFy_mkKLPwL4 > div > div > button"
).is_visible(): ).is_visible():
@ -264,10 +272,11 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
) )
else: else:
for idx, comment in enumerate( for idx, comment in enumerate(
track( reddit_object["comments"][:screenshot_num]
reddit_object["comments"][:screenshot_num], # track(
"Downloading screenshots...", # reddit_object["comments"][:screenshot_num],
) # "Downloading screenshots...",
# )
): ):
# Stop if we have reached the screenshot_num # Stop if we have reached the screenshot_num
if idx >= screenshot_num: if idx >= screenshot_num:
@ -277,6 +286,13 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
page.locator('[data-testid="content-gate"] button').click() page.locator('[data-testid="content-gate"] button').click()
page.goto(f'https://reddit.com{comment["comment_url"]}', timeout=0) page.goto(f'https://reddit.com{comment["comment_url"]}', timeout=0)
# Try to set preferred theme from settings
set_preferred_theme(settings.config["settings"]["theme"], page)
if screenshot_debug:
comment_excerpt = get_comment_excerpt(comment)
print(f"[{idx + 1}/{screenshot_num} {comment['comment_id']}]: {comment_excerpt}")
# translate code # translate code
@ -312,6 +328,26 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
# Bypass "See this post in..." # Bypass "See this post in..."
bypass_see_this_post_in(page) bypass_see_this_post_in(page)
# Click on "View more comments", if present
view_more_comments_button = page.locator('.overflow-actions-dialog ~ button').first
if view_more_comments_button.is_visible():
print("View more comments... [CLICK]")
view_more_comments_button.dispatch_event('click')
view_more_comments_button.wait_for(state='hidden')
# If the comment text itself is collapsed, expand it
comment_text_loc = comment_loc.locator("p").first
if not comment_text_loc.is_visible():
self_expand_button_loc = comment_loc.locator('summary button').first
if self_expand_button_loc.is_visible():
self_expand_button_loc.dispatch_event('click')
# If replies are expanded toggle them
expanded_loc = comment_loc.locator('button[aria-expanded="true"]').first
if expanded_loc.is_visible():
#print("If replies are expanded toggle them")
expanded_loc.dispatch_event("click")
# breakpoint() # breakpoint()
comment_loc.first.screenshot( comment_loc.first.screenshot(
path=f"assets/temp/{reddit_id}/png/comment_{idx}.png" path=f"assets/temp/{reddit_id}/png/comment_{idx}.png"

Loading…
Cancel
Save