@@ -2752,7 +2752,7 @@ <h1>🐙 CDP Mode</h1>
27522752<!-- SeleniumBase Docs -->
27532753
27542754< h2 id ="cdp-mode "> < a href ="https://github.com/seleniumbase/SeleniumBase/ "> < img src ="https://seleniumbase.github.io/img/logo6.png " title ="SeleniumBase " width ="32 "> </ a > CDP Mode 🐙< a class ="headerlink " href ="#cdp-mode " title ="Permanent link "> ¶</ a > </ h2 >
2755- < p > 🐙 < b translate ="no "> SeleniumBase</ b > < b translate ="no "> CDP Mode</ b > (Chrome Devtools Protocol Mode) is a special mode inside of < b > < a href ="../../help_docs/uc_mode.md " translate ="no "> < span translate ="no "> SeleniumBase UC Mode</ span > </ a > </ b > that lets bots appear human while controlling the browser with the < b translate ="no "> CDP-Driver</ b > . Although regular < span translate ="no "> UC Mode</ span > can't perform < span translate ="no "> WebDriver</ span > actions while the < code > driver</ code > is disconnected from the browser, the < span translate ="no "> CDP-Driver</ span > can still perform actions ( while maintaining its cover). </ p >
2755+ < p > 🐙 < b translate ="no "> SeleniumBase</ b > < b translate ="no "> CDP Mode</ b > (Chrome Devtools Protocol Mode) is a special mode inside of < b > < a href ="../../help_docs/uc_mode.md " translate ="no "> < span translate ="no "> SeleniumBase UC Mode</ span > </ a > </ b > that lets bots appear human while controlling the browser with the < b translate ="no "> CDP-Driver</ b > . Although regular < span translate ="no "> UC Mode</ span > can't perform < span translate ="no "> WebDriver</ span > actions while the < code > driver</ code > is disconnected from the browser, the < span translate ="no "> CDP-Driver</ span > can still perform actions while maintaining its cover. (For Python 3.11 or newer!) </ p >
27562756< p > 👤 < b translate ="no "> UC Mode</ b > avoids bot-detection by first disconnecting WebDriver from the browser at strategic times, calling special < code > PyAutoGUI</ code > methods to bypass CAPTCHAs (as needed), and finally reconnecting the < code > driver</ code > afterwards so that WebDriver actions can be performed again. Although this approach works for bypassing simple CAPTCHAs, more flexibility is needed for bypassing bot-detection on websites with advanced protection. (That's where < b translate ="no "> CDP Mode</ b > comes in.)</ p >
27572757< p > 🐙 < b translate ="no "> CDP Mode</ b > is based on < a href ="https://github.com/HyperionGray/python-chrome-devtools-protocol " translate ="no "> python-cdp</ a > , < a href ="https://github.com/HyperionGray/trio-chrome-devtools-protocol " translate ="no "> trio-cdp</ a > , and < a href ="https://github.com/ultrafunkamsterdam/nodriver " translate ="no "> nodriver</ a > . < code > trio-cdp</ code > is an early implementation of < code > python-cdp</ code > , and < code > nodriver</ code > is a modern implementation of < code > python-cdp</ code > . (Refactored Python-CDP code is imported from < a href ="https://github.com/mdmintz/MyCDP " translate ="no "> MyCDP</ a > .)</ p >
27582758< p > 🐙 < b translate ="no "> CDP Mode</ b > includes multiple updates to the above, such as:</ p >
@@ -2815,15 +2815,15 @@ <h3 id="example-1-pokemon-site-using-incapsulaimperva-protection-with-invisible-
28152815< span class ="k "> with</ span > < span class ="n "> SB</ span > < span class ="p "> (</ span > < span class ="n "> uc</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> ,</ span > < span class ="n "> test</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> ,</ span > < span class ="n "> locale_code</ span > < span class ="o "> =</ span > < span class ="s2 "> "en"</ span > < span class ="p "> )</ span > < span class ="k "> as</ span > < span class ="n "> sb</ span > < span class ="p "> :</ span >
28162816 < span class ="n "> url</ span > < span class ="o "> =</ span > < span class ="s2 "> "https://www.pokemon.com/us"</ span >
28172817 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> activate_cdp_mode</ span > < span class ="p "> (</ span > < span class ="n "> url</ span > < span class ="p "> )</ span >
2818- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 1.5 </ span > < span class ="p "> )</ span >
2818+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 3 </ span > < span class ="p "> )</ span >
28192819 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click_if_visible</ span > < span class ="p "> (</ span > < span class ="s2 "> "button#onetrust-reject-all-handler"</ span > < span class ="p "> )</ span >
2820- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 0.5 </ span > < span class ="p "> )</ span >
2820+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 1 </ span > < span class ="p "> )</ span >
28212821 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s1 "> 'a[href="https://www.pokemon.com/us/pokedex/"]'</ span > < span class ="p "> )</ span >
28222822 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span >
28232823 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s1 "> 'b:contains("Show Advanced Search")'</ span > < span class ="p "> )</ span >
28242824 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span >
28252825 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s1 "> 'span[data-type="type"][data-value="electric"]'</ span > < span class ="p "> )</ span >
2826- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 0.5 </ span > < span class ="p "> )</ span >
2826+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 1 </ span > < span class ="p "> )</ span >
28272827 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s2 "> "a#advSearch"</ span > < span class ="p "> )</ span >
28282828 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span >
28292829 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s1 "> 'img[src*="img/pokedex/detail/025.png"]'</ span > < span class ="p "> )</ span >
@@ -2870,13 +2870,13 @@ <h3 id="example-2-hyatt-site-using-kasada-protection">🔖 Example 2: (Hyatt sit
28702870< span class ="k "> with</ span > < span class ="n "> SB</ span > < span class ="p "> (</ span > < span class ="n "> uc</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> ,</ span > < span class ="n "> test</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> ,</ span > < span class ="n "> locale_code</ span > < span class ="o "> =</ span > < span class ="s2 "> "en"</ span > < span class ="p "> )</ span > < span class ="k "> as</ span > < span class ="n "> sb</ span > < span class ="p "> :</ span >
28712871 < span class ="n "> url</ span > < span class ="o "> =</ span > < span class ="s2 "> "https://www.hyatt.com/"</ span >
28722872 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> activate_cdp_mode</ span > < span class ="p "> (</ span > < span class ="n "> url</ span > < span class ="p "> )</ span >
2873- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 1.5 </ span > < span class ="p "> )</ span >
2873+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 2 </ span > < span class ="p "> )</ span >
28742874 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click_if_visible</ span > < span class ="p "> (</ span > < span class ="s1 "> 'button[aria-label="Close"]'</ span > < span class ="p "> )</ span >
2875- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 0.5 </ span > < span class ="p "> )</ span >
2875+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 1 </ span > < span class ="p "> )</ span >
28762876 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s1 "> 'span:contains("Explore")'</ span > < span class ="p "> )</ span >
28772877 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span >
28782878 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s1 "> 'a:contains("Hotels & Resorts")'</ span > < span class ="p "> )</ span >
2879- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 2.5 </ span > < span class ="p "> )</ span >
2879+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 3 </ span > < span class ="p "> )</ span >
28802880 < span class ="n "> location</ span > < span class ="o "> =</ span > < span class ="s2 "> "Anaheim, CA, USA"</ span >
28812881 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> press_keys</ span > < span class ="p "> (</ span > < span class ="s2 "> "input#searchbox"</ span > < span class ="p "> ,</ span > < span class ="n "> location</ span > < span class ="p "> )</ span >
28822882 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span >
@@ -2885,7 +2885,7 @@ <h3 id="example-2-hyatt-site-using-kasada-protection">🔖 Example 2: (Hyatt sit
28852885 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s1 "> 'div.hotel-card-footer button'</ span > < span class ="p "> )</ span >
28862886 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span >
28872887 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s1 "> 'button[data-locator="find-hotels"]'</ span > < span class ="p "> )</ span >
2888- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi "> 4 </ span > < span class ="p "> )</ span >
2888+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi "> 5 </ span > < span class ="p "> )</ span >
28892889 < span class ="n "> hotel_names</ span > < span class ="o "> =</ span > < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> select_all</ span > < span class ="p "> (</ span >
28902890 < span class ="s1 "> 'div[data-booking-status="BOOKABLE"] [class*="HotelCard_header"]'</ span >
28912891 < span class ="p "> )</ span >
@@ -2916,20 +2916,20 @@ <h3 id="example-3-bestwestern-site-using-datadome-protection">🔖 Example 3: (B
29162916< span class ="k "> with</ span > < span class ="n "> SB</ span > < span class ="p "> (</ span > < span class ="n "> uc</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> ,</ span > < span class ="n "> test</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> ,</ span > < span class ="n "> locale_code</ span > < span class ="o "> =</ span > < span class ="s2 "> "en"</ span > < span class ="p "> )</ span > < span class ="k "> as</ span > < span class ="n "> sb</ span > < span class ="p "> :</ span >
29172917 < span class ="n "> url</ span > < span class ="o "> =</ span > < span class ="s2 "> "https://www.bestwestern.com/en_US.html"</ span >
29182918 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> activate_cdp_mode</ span > < span class ="p "> (</ span > < span class ="n "> url</ span > < span class ="p "> )</ span >
2919- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf "> 1 .5</ span > < span class ="p "> )</ span >
2919+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf "> 2 .5</ span > < span class ="p "> )</ span >
29202920 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click_if_visible</ span > < span class ="p "> (</ span > < span class ="s2 "> "div.onetrust-close-btn-handler"</ span > < span class ="p "> )</ span >
2921- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 0.5 </ span > < span class ="p "> )</ span >
2921+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 1 </ span > < span class ="p "> )</ span >
29222922 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s2 "> "input#destination-input"</ span > < span class ="p "> )</ span >
2923- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 1.5 </ span > < span class ="p "> )</ span >
2923+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 2 </ span > < span class ="p "> )</ span >
29242924 < span class ="n "> location</ span > < span class ="o "> =</ span > < span class ="s2 "> "Palm Springs, CA, USA"</ span >
29252925 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> press_keys</ span > < span class ="p "> (</ span > < span class ="s2 "> "input#destination-input"</ span > < span class ="p "> ,</ span > < span class ="n "> location</ span > < span class ="p "> )</ span >
2926- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 0.6 </ span > < span class ="p "> )</ span >
2926+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 1 </ span > < span class ="p "> )</ span >
29272927 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s2 "> "ul#google-suggestions li"</ span > < span class ="p "> )</ span >
2928- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf " > 0.6 </ span > < span class ="p "> )</ span >
2928+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi " > 1 </ span > < span class ="p "> )</ span >
29292929 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s2 "> "button#btn-modify-stay-update"</ span > < span class ="p "> )</ span >
2930- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf "> 1.5</ span > < span class ="p "> )</ span >
2931- < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s2 "> "label#available-label"</ span > < span class ="p "> )</ span >
29322930 < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mi "> 4</ span > < span class ="p "> )</ span >
2931+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> click</ span > < span class ="p "> (</ span > < span class ="s2 "> "label#available-label"</ span > < span class ="p "> )</ span >
2932+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> sleep</ span > < span class ="p "> (</ span > < span class ="mf "> 2.5</ span > < span class ="p "> )</ span >
29332933 < span class ="nb "> print</ span > < span class ="p "> (</ span > < span class ="s2 "> "Best Western Hotels in </ span > < span class ="si "> %s</ span > < span class ="s2 "> :"</ span > < span class ="o "> %</ span > < span class ="n "> location</ span > < span class ="p "> )</ span >
29342934 < span class ="n "> summary_details</ span > < span class ="o "> =</ span > < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> get_text</ span > < span class ="p "> (</ span > < span class ="s2 "> "#summary-details-column"</ span > < span class ="p "> )</ span >
29352935 < span class ="n "> dates</ span > < span class ="o "> =</ span > < span class ="n "> summary_details</ span > < span class ="o "> .</ span > < span class ="n "> split</ span > < span class ="p "> (</ span > < span class ="s2 "> "ROOM"</ span > < span class ="p "> )[</ span > < span class ="mi "> 0</ span > < span class ="p "> ]</ span > < span class ="o "> .</ span > < span class ="n "> split</ span > < span class ="p "> (</ span > < span class ="s2 "> "DATES"</ span > < span class ="p "> )[</ span > < span class ="o "> -</ span > < span class ="mi "> 1</ span > < span class ="p "> ]</ span > < span class ="o "> .</ span > < span class ="n "> strip</ span > < span class ="p "> ()</ span >
@@ -3021,6 +3021,7 @@ <h3 id="cdp-mode-api-methods">🐙 CDP Mode API / Methods<a class="headerlink" h
30213021< span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> get_flattened_document</ span > < span class ="p "> ()</ span >
30223022< span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> get_element_attributes</ span > < span class ="p "> (</ span > < span class ="n "> selector</ span > < span class ="p "> )</ span >
30233023< span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> get_element_html</ span > < span class ="p "> (</ span > < span class ="n "> selector</ span > < span class ="p "> )</ span >
3024+ < span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> set_locale</ span > < span class ="p "> (</ span > < span class ="n "> locale</ span > < span class ="p "> )</ span >
30243025< span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> set_attributes</ span > < span class ="p "> (</ span > < span class ="n "> selector</ span > < span class ="p "> ,</ span > < span class ="n "> attribute</ span > < span class ="p "> ,</ span > < span class ="n "> value</ span > < span class ="p "> )</ span >
30253026< span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> internalize_links</ span > < span class ="p "> ()</ span >
30263027< span class ="n "> sb</ span > < span class ="o "> .</ span > < span class ="n "> cdp</ span > < span class ="o "> .</ span > < span class ="n "> is_element_present</ span > < span class ="p "> (</ span > < span class ="n "> selector</ span > < span class ="p "> )</ span >
0 commit comments