@@ -2752,7 +2752,7 @@ <h1>🐙 CDP Mode</h1>
2752
2752
<!-- SeleniumBase Docs -->
2753
2753
2754
2754
< 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 >
2756
2756
< 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 >
2757
2757
< 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 >
2758
2758
< 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-
2815
2815
< 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 >
2816
2816
< span class ="n "> url</ span > < span class ="o "> =</ span > < span class ="s2 "> "https://www.pokemon.com/us"</ span >
2817
2817
< 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 >
2819
2819
< 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 >
2821
2821
< 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 >
2822
2822
< 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 >
2823
2823
< 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 >
2824
2824
< 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 >
2825
2825
< 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 >
2827
2827
< 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 >
2828
2828
< 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 >
2829
2829
< 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
2870
2870
< 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 >
2871
2871
< span class ="n "> url</ span > < span class ="o "> =</ span > < span class ="s2 "> "https://www.hyatt.com/"</ span >
2872
2872
< 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 >
2874
2874
< 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 >
2876
2876
< 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 >
2877
2877
< 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 >
2878
2878
< 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 >
2880
2880
< span class ="n "> location</ span > < span class ="o "> =</ span > < span class ="s2 "> "Anaheim, CA, USA"</ span >
2881
2881
< 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 >
2882
2882
< 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
2885
2885
< 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 >
2886
2886
< 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 >
2887
2887
< 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 >
2889
2889
< 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 >
2890
2890
< span class ="s1 "> 'div[data-booking-status="BOOKABLE"] [class*="HotelCard_header"]'</ span >
2891
2891
< span class ="p "> )</ span >
@@ -2916,20 +2916,20 @@ <h3 id="example-3-bestwestern-site-using-datadome-protection">🔖 Example 3: (B
2916
2916
< 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 >
2917
2917
< span class ="n "> url</ span > < span class ="o "> =</ span > < span class ="s2 "> "https://www.bestwestern.com/en_US.html"</ span >
2918
2918
< 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 >
2920
2920
< 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 >
2922
2922
< 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 >
2924
2924
< span class ="n "> location</ span > < span class ="o "> =</ span > < span class ="s2 "> "Palm Springs, CA, USA"</ span >
2925
2925
< 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 >
2927
2927
< 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 >
2929
2929
< 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 >
2932
2930
< 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 >
2933
2933
< 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 >
2934
2934
< 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 >
2935
2935
< 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
3021
3021
< 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 >
3022
3022
< 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 >
3023
3023
< 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 >
3024
3025
< 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 >
3025
3026
< 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 >
3026
3027
< 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