diff --git a/examples/cdp_mode/raw_socialblade.py b/examples/cdp_mode/raw_socialblade.py new file mode 100644 index 00000000000..fde723e6de6 --- /dev/null +++ b/examples/cdp_mode/raw_socialblade.py @@ -0,0 +1,36 @@ +"""Bypass bot-detection to view SocialBlade ranks for YouTube""" +from seleniumbase import SB + +with SB(uc=True, test=True, ad_block=True, pls="none") as sb: + url = "https://socialblade.com/" + sb.activate_cdp_mode(url) + sb.sleep(1.5) + sb.uc_gui_click_captcha() + sb.sleep(0.5) + channel_name = "michaelmintz" + sb.cdp.press_keys('input[name="query"]', channel_name) + sb.cdp.click('form[action*="/search"] button') + sb.sleep(2) + sb.cdp.click('a[title="%s"] h2' % channel_name) + sb.sleep(1.5) + sb.cdp.remove_elements("#lngtd-top-sticky") + sb.sleep(1.5) + name = sb.cdp.get_text("h1") + link = sb.cdp.get_attribute("#YouTubeUserTopInfoBlockTop h4 a", "href") + subscribers = sb.cdp.get_text("#youtube-stats-header-subs") + video_views = sb.cdp.get_text("#youtube-stats-header-views") + rankings = sb.cdp.get_text( + '#socialblade-user-content [style*="border-bottom"]' + ).replace("\xa0", "").replace(" ", " ").replace(" ", " ") + print("********** SocialBlade Stats for %s: **********" % name) + print(">>> (Link: %s) <<<" % link) + print("* YouTube Subscribers: %s" % subscribers) + print("* YouTube Video Views: %s" % video_views) + print("********** SocialBlade Ranks: **********") + for row in rankings.split("\n"): + if len(row.strip()) > 8: + print("--> " + row.strip()) + for i in range(17): + sb.cdp.scroll_down(6) + sb.sleep(0.1) + sb.sleep(2) diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index 0247a0dbf13..dc9b0326b88 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.33.9" +__version__ = "4.33.10" diff --git a/seleniumbase/undetected/cdp_driver/element.py b/seleniumbase/undetected/cdp_driver/element.py index 953a9c39dd2..491d86ef3df 100644 --- a/seleniumbase/undetected/cdp_driver/element.py +++ b/seleniumbase/undetected/cdp_driver/element.py @@ -438,12 +438,15 @@ async def apply(self, js_function, return_by_value=True): ) ) ) - if result and result[0]: - if return_by_value: - return result[0].value - return result[0] - elif result[1]: - return result[1] + try: + if result and result[0]: + if return_by_value: + return result[0].value + return result[0] + elif result[1]: + return result[1] + except Exception: + return self async def get_position_async(self, abs=False) -> Position: if not self.parent or not self.object_id: