diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 3db14aa..9598a19 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -12,7 +12,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@v4 + - uses: actions/stale@v9 id: stale-issue name: stale-issue with: @@ -31,7 +31,7 @@ jobs: ascending: true #debug-only: true - - uses: actions/stale@v4 + - uses: actions/stale@v9 id: stale-pr name: stale-pr with: diff --git a/README.md b/README.md index 81e37be..5fadd83 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ Please read our [contributing guidelines](CONTRIBUTING.md) for more detailed inf Elebumm (Lewis#6305) - https://github.com/elebumm (Founder) -Jason (JasonLovesDoggo#1904) - https://github.com/JasonLovesDoggo (Maintainer) +Jason (personality.json) - https://github.com/JasonLovesDoggo (Maintainer) Simon (OpenSourceSimon) - https://github.com/OpenSourceSimon diff --git a/video_creation/screenshot_downloader.py b/video_creation/screenshot_downloader.py index cdcf8ef..6d76590 100644 --- a/video_creation/screenshot_downloader.py +++ b/video_creation/screenshot_downloader.py @@ -73,7 +73,7 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int): print_substep("Launching Headless Browser...") browser = p.chromium.launch( - headless=True + headless=False ) # 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 # When the dsf is 1, the width of the screenshot is 600 pixels @@ -97,10 +97,15 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int): page.goto("https://www.reddit.com/login", timeout=0) page.set_viewport_size(ViewportSize(width=1920, height=1080)) page.wait_for_load_state() + if selector_exists(page, "input#login-username"): - page.locator('[name="username"]').fill(settings.config["reddit"]["creds"]["username"]) - page.locator('[name="password"]').fill(settings.config["reddit"]["creds"]["password"]) - page.locator("button[class$='m-full-width']").click() + page.locator('input#login-username').fill(settings.config["reddit"]["creds"]["username"]) + page.locator('input#login-password').fill(settings.config["reddit"]["creds"]["password"]) + page.locator("div[slot='primaryButton'] button.login").click() + else: + page.locator('[name="username"]').fill(settings.config["reddit"]["creds"]["username"]) + page.locator('[name="password"]').fill(settings.config["reddit"]["creds"]["password"]) + page.locator("button[class$='m-full-width']").click() page.wait_for_timeout(5000) login_error_div = page.locator(".AnimatedForm__errorMessage").first @@ -175,12 +180,19 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int): # zoom the body of the page 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 - location = page.locator('[data-test-id="post-content"]').bounding_box() + if selector_exists(page, '[data-test-id="post-content"]'): + location = page.locator('[data-test-id="post-content"]').bounding_box() + else: + location = page.locator(f'#t3_{reddit_id}').bounding_box() + for i in location: location[i] = float("{:.2f}".format(location[i] * zoom)) page.screenshot(clip=location, path=postcontentpath) else: - page.locator('[data-test-id="post-content"]').screenshot(path=postcontentpath) + if selector_exists(page, '[data-test-id="post-content"]'): + page.locator('[data-test-id="post-content"]').screenshot(path=postcontentpath) + else: + page.locator(f'#t3_{reddit_id}').screenshot(path=postcontentpath) except Exception as e: print_substep("Something went wrong!", style="red") resp = input( @@ -211,6 +223,8 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int): "Downloading screenshots...", ) ): + print_substep(f"Downloading screenshot {idx + 1} of {screenshot_num}...") + print_substep(f"Comment: {comment['comment_body']}") # Stop if we have reached the screenshot_num if idx >= screenshot_num: break @@ -239,9 +253,13 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int): # zoom the body of the page page.evaluate("document.body.style.zoom=" + str(zoom)) # scroll comment into view - 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 - location = page.locator(f"#t1_{comment['comment_id']}").bounding_box() + if selector_exists(page, '[data-testid="comment"]'): + page.locator(f"#t1_{comment['comment_id']}").scroll_into_view_if_needed() + location = page.locator(f"#t1_{comment['comment_id']}").bounding_box() + else: + page.locator(f"#t1_{comment['comment_id']}-comment-rtjson-content").scroll_into_view_if_needed() + # as zooming the body doesn't change the properties of the divs, we need to adjust for the zoom + location = page.locator(f"#t1_{comment['comment_id']}-comment-rtjson-content").bounding_box() for i in location: location[i] = float("{:.2f}".format(location[i] * zoom)) page.screenshot( @@ -249,9 +267,14 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int): path=f"assets/temp/{reddit_id}/png/comment_{idx}.png", ) else: - page.locator(f"#t1_{comment['comment_id']}").screenshot( - path=f"assets/temp/{reddit_id}/png/comment_{idx}.png" - ) + if selector_exists(page, f"#t1_{comment['comment_id']}"): + page.locator(f"#t1_{comment['comment_id']}").screenshot( + path=f"assets/temp/{reddit_id}/png/comment_{idx}.png" + ) + else: + page.locator(f"#t1_{comment['comment_id']}-comment-rtjson-content").screenshot( + path=f"assets/temp/{reddit_id}/png/comment_{idx}.png" + ) except TimeoutError: del reddit_object["comments"] screenshot_num += 1 @@ -262,3 +285,13 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int): browser.close() print_substep("Screenshots downloaded Successfully.", style="bold green") + + + + +def selector_exists(page, selector, timeout=3000): + try: + element = page.locator(selector).is_visible(timeout=timeout) + return element + except: + return False \ No newline at end of file