https://youtube.com/watch?v=R9HNsnbYh8o
๐น We're going to be using... ๐น
๐น To bypass all the CAPTCHAs... ๐น
๐น In all the places... ๐น
ubuntu:24.04)๐น In all the places... ๐น
ubuntu:24.04)๐น In all the places... ๐น
ubuntu:24.04)๐น In all the places... ๐น
ubuntu:24.04)๐น With live demos on major sites... ๐น
๐น With live demos on major sites... ๐น
๐น With live demos on major sites... ๐น
๐น With live demos on major sites... ๐น
๐น With live demos on major sites... ๐น
๐น With live demos on major sites... ๐น






๐น CDP alone isn't enough for stealth... ๐น
๐น CDP alone isn't enough for stealth... ๐น


SB() "nested sync" format.sb_cdp "sync" format. (Pure CDP)cdp_driver "async" format. (Pure CDP)SB() "nested sync" format.sb_cdp "sync" format. (Pure CDP)cdp_driver "async" format. (Pure CDP)SB() "nested sync" format.sb_cdp "sync" format. (Pure CDP)cdp_driver "async" format. (Pure CDP)SB() "nested sync" format.sb_cdp "sync" format. (Pure CDP)cdp_driver "async" format. (Pure CDP)SB() "nested sync" format.sb_cdp "sync" format. (Pure CDP)cdp_driver "async" format. (Pure CDP)
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
sb_cdp "sync" Stealthly Playwright Mode example:
from playwright.sync_api import sync_playwright
from seleniumbase import sb_cdp
sb = sb_cdp.Chrome()
endpoint_url = sb.get_endpoint_url()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint_url)
page = browser.contexts[0].pages[0]
page.goto("https://copilot.microsoft.com")
page.wait_for_selector("textarea#userInput")
query = "Playwright Python connect_over_cdp() sync example"
page.fill("textarea#userInput", query)
page.wait_for_timeout(2000)
page.click('button[data-testid="submit-button"]')
sb.sleep(5.25)
sb.solve_captcha()
...
PyAutoGUI is one such tool:
PyAutoGUI is one such tool:
Dockerfile.
Dockerfile.
Dockerfile has you covered:
Input.dispatchMouseEvent).Input.dispatchMouseEvent).Input.dispatchMouseEvent).Input.dispatchMouseEvent).Input.dispatchMouseEvent).
sb.solve_captcha()sb.solve_captcha()sb.solve_captcha() handles all of these:sb.solve_captcha() handles all of these:sb.solve_captcha() handles all of these:sb.solve_captcha() handles all of these:sb.solve_captcha() handles all of these:
sleep() calls can help.
sleep() calls can help.
sleep() calls can help.
sleep() calls can help.


Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Amazon-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, ad_block=True) as sb:
url = "https://www.amazon.com"
sb.activate_cdp_mode(url)
sb.sleep(2)
sb.click_if_visible('button[alt="Continue shopping"]')
sb.sleep(2)
sb.press_keys('input[role="searchbox"]', "TI-89\n")
sb.sleep(3)
for i in range(16):
sb.scroll_down(16)
print(sb.get_page_title())
sb.save_as_pdf_to_logs()
sb.save_page_source_to_logs()
sb.save_screenshot_to_logs()
print("Logs have been saved to: ./latest_logs/")
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
Let's take a look at that Nike-scraping script:
from seleniumbase import SB
with SB(uc=True, test=True, locale="en", pls="none") as sb:
url = "https://www.nike.com/"
sb.activate_cdp_mode(url)
sb.sleep(2.5)
sb.click('[data-testid="user-tools-container"] search')
sb.sleep(1.5)
search = "Nike Air Force 1"
sb.press_keys('input[type="search"]', search)
sb.sleep(4)
details = 'ul[data-testid*="products"] figure .details'
elements = sb.select_all(details)
if elements:
print('**** Found results for "%s": ****' %% search)
for element in elements:
print("* " + element.text)
sb.sleep() calls are strategic.
sb.sleep() calls are strategic.
proxy option for that.
proxy option for that.
Here's how to configure a proxy with SeleniumBase:
pytest --proxy="host:port"pytest --proxy="user:pass@host:port"SB(proxy="host:port")SB(proxy="user:pass@host:port")Here's how to configure a proxy with SeleniumBase:
pytest --proxy="host:port"pytest --proxy="user:pass@host:port"SB(proxy="host:port")SB(proxy="user:pass@host:port")Here's how to configure a proxy with SeleniumBase:
pytest --proxy="host:port"pytest --proxy="user:pass@host:port"SB(proxy="host:port")SB(proxy="user:pass@host:port")Here's how to configure a proxy with SeleniumBase:
pytest --proxy="host:port"pytest --proxy="user:pass@host:port"SB(proxy="host:port")SB(proxy="user:pass@host:port")Here's how to configure a proxy with SeleniumBase:
pytest --proxy="host:port"pytest --proxy="user:pass@host:port"SB(proxy="host:port")SB(proxy="user:pass@host:port")Here's how to configure a proxy with SeleniumBase:
pytest --proxy="host:port"pytest --proxy="user:pass@host:port"SB(proxy="host:port")SB(proxy="user:pass@host:port")Here's how to configure a proxy with SeleniumBase:
pytest --proxy="host:port"pytest --proxy="user:pass@host:port"SB(proxy="host:port")SB(proxy="user:pass@host:port")
"sbase proxy"
"sbase proxy"
"sbase proxy"
More configuration options for "sbase proxy":
๐ Here's how to configure those with SeleniumBase:
geoloc=(26.863, 80.94)geoloc=(35.050681, 136.844728)tzone="Asia/Kolkata"tzone="Asia/Tokyo"๐ Here's how to configure those with SeleniumBase:
geoloc=(26.863, 80.94)geoloc=(35.050681, 136.844728)tzone="Asia/Kolkata"tzone="Asia/Tokyo"๐ Here's how to configure those with SeleniumBase:
geoloc=(26.863, 80.94)geoloc=(35.050681, 136.844728)tzone="Asia/Kolkata"tzone="Asia/Tokyo"
ThreadPoolExecutor has you covered.
cf_clearance)
cf_clearance cookie is easy:
cf_clearance cookie is easy:
SeleniumBase has an option for using unbranded
Chromium in place of regular Google Chrome.
Here's how to use unbranded Chromium in scripts:
pytest --use-chromiumSB(use_chromium=True)Here's how to use unbranded Chromium in scripts:
pytest --use-chromiumSB(use_chromium=True)Here's how to use unbranded Chromium in scripts:
pytest --use-chromiumSB(use_chromium=True)Here's how to use unbranded Chromium in scripts:
pytest --use-chromiumSB(use_chromium=True)SeleniumBase can download Chromium in advance:
sbase get chromium
SeleniumBase can download Chromium in advance:
sbase get chromium


๐ Google reCAPTCHA ๐


๐ Google reCAPTCHA ๐

reCAPTCHA is very effective at catching bots.
๐ Google reCAPTCHA ๐

Even though Google reCAPTCHA looks similar
to Cloudflare Turnstile, they are very different!

Since Google makes both reCAPTCHA and Chrome, reCAPTCHA has access to more data than other CAPTCHAs, and can therefore detect bots better.
Since Google makes both reCAPTCHA and Chrome, reCAPTCHA has access to more data than other CAPTCHAs, and can therefore detect bots better.


๐ Google reCAPTCHA ๐

Note: Calling open(url) from UC Mode
automatically activates CDP Mode now.
sb.driver.get(url) keeps you in UC Mode.Note: Calling open(url) from UC Mode
automatically activates CDP Mode now.
sb.driver.get(url) keeps you in UC Mode.Note: Calling open(url) from UC Mode
automatically activates CDP Mode now.
sb.driver.get(url) keeps you in UC Mode.Note: Calling open(url) from UC Mode
automatically activates CDP Mode now.
sb.driver.get(url) keeps you in UC Mode.Note: Calling open(url) from UC Mode
automatically activates CDP Mode now.
sb.driver.get(url) keeps you in UC Mode.
Naming conventions used in the SeleniumBase repo:
test_" or ends with_test.py", then it runs with "pytest".raw_",python".Naming conventions used in the SeleniumBase repo:
test_" or ends with_test.py", then it runs with "pytest".raw_",python".Naming conventions used in the SeleniumBase repo:
test_" or ends with_test.py", then it runs with "pytest".raw_",python".Naming conventions used in the SeleniumBase repo:
test_" or ends with_test.py", then it runs with "pytest".raw_",python".Finding stealthy examples in the SeleniumBase repo:
SeleniumBase/examples/cdp_mode/"SeleniumBase/examples/cdp_mode/playwright/"
Finding stealthy examples in the SeleniumBase repo:
SeleniumBase/examples/cdp_mode/"SeleniumBase/examples/cdp_mode/playwright/"
Finding stealthy examples in the SeleniumBase repo:
SeleniumBase/examples/cdp_mode/"SeleniumBase/examples/cdp_mode/playwright/"
Let's make a quick trip to the SeleniumBase repo:
๐ค You've reached the AI section of this video! ๐ค
๐ค I've actually been using a lot of AI already! ๐ค
๐ค I've actually been using a lot of AI already! ๐ค
๐ค Thanks for all the free artwork, Gemini! ๐ค
Let's use Gemini's power to bypass CAPTCHAs!
Every year the AI models get better and better
Definitely an improvement over last year's models
I also covered AI in my earlier video:Can AI tools help you with web-scraping & CAPTCHA-bypass?

I also covered AI in my earlier video:

I also covered AI in my earlier video:

SeleniumBase works well for web-scraping.
SeleniumBase works well for web-scraping.
If you need help creating scripts,
just ask the AI! (maybe Gemini)

If you need help creating scripts,
just ask the AI! (maybe Gemini)
