Skip to content

Commit 2a5d586

Browse files
committed
Update the docs
1 parent ee176f6 commit 2a5d586

File tree

3 files changed

+115
-65
lines changed

3 files changed

+115
-65
lines changed

examples/cdp_mode/ReadMe/index.html

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -877,9 +877,18 @@
877877
<ul class="md-nav__list">
878878

879879
<li class="md-nav__item">
880-
<a href="#cdp-mode-initialization" class="md-nav__link">
880+
<a href="#cdp-mode-usage" class="md-nav__link">
881881
<span class="md-ellipsis">
882-
🐙 CDP Mode initialization
882+
🐙 CDP Mode usage
883+
</span>
884+
</a>
885+
886+
</li>
887+
888+
<li class="md-nav__item">
889+
<a href="#here-are-some-common-sbcdp-methods" class="md-nav__link">
890+
<span class="md-ellipsis">
891+
🐙 Here are some common sb.cdp methods
883892
</span>
884893
</a>
885894

@@ -2647,9 +2656,18 @@
26472656
<ul class="md-nav__list">
26482657

26492658
<li class="md-nav__item">
2650-
<a href="#cdp-mode-initialization" class="md-nav__link">
2659+
<a href="#cdp-mode-usage" class="md-nav__link">
2660+
<span class="md-ellipsis">
2661+
🐙 CDP Mode usage
2662+
</span>
2663+
</a>
2664+
2665+
</li>
2666+
2667+
<li class="md-nav__item">
2668+
<a href="#here-are-some-common-sbcdp-methods" class="md-nav__link">
26512669
<span class="md-ellipsis">
2652-
🐙 CDP Mode initialization
2670+
🐙 Here are some common sb.cdp methods
26532671
</span>
26542672
</a>
26552673

@@ -2736,7 +2754,7 @@ <h1>🐙 CDP Mode</h1>
27362754
<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">&para;</a></h2>
27372755
<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>
27382756
<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>
2739-
<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> was an early implementation of <code>python-cdp</code>, whereas <code>nodriver</code> is a modern implementation of <code>python-cdp</code>. (Refactored CDP code is imported from <a href="https://github.com/mdmintz/MyCDP" translate="no">MyCDP</a>.)</p>
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>
27402758
<p>🐙 <b translate="no">CDP Mode</b> includes multiple updates to the above, such as:</p>
27412759
<ul>
27422760
<li>Sync methods. (Using <code>async</code>/<code>await</code> is not necessary!)</li>
@@ -2747,13 +2765,38 @@ <h2 id="cdp-mode"><a href="https://github.com/seleniumbase/SeleniumBase/"><img s
27472765
<li>Faster response time for support. (Eg. <a href="https://discord.gg/EdhQTn3EyE">Discord Chat</a>)</li>
27482766
</ul>
27492767
<hr />
2750-
<h3 id="cdp-mode-initialization">🐙 <b translate="no">CDP Mode</b> initialization<a class="headerlink" href="#cdp-mode-initialization" title="Permanent link">&para;</a></h3>
2768+
<h3 id="cdp-mode-usage">🐙 <b translate="no">CDP Mode</b> usage<a class="headerlink" href="#cdp-mode-usage" title="Permanent link">&para;</a></h3>
27512769
<ul>
2752-
<li><code>sb.activate_cdp_mode(url)</code></li>
2770+
<li><strong><code>sb.activate_cdp_mode(url)</code></strong></li>
27532771
</ul>
27542772
<blockquote>
27552773
<p>(Call that from a <strong>UC Mode</strong> script)</p>
27562774
</blockquote>
2775+
<p>That disconnects WebDriver from Chrome (which prevents detection), and gives you access to <code>sb.cdp</code> methods (which don't trigger anti-bot checks).</p>
2776+
<h3 id="here-are-some-common-sbcdp-methods">🐙 Here are some common <code>sb.cdp</code> methods<a class="headerlink" href="#here-are-some-common-sbcdp-methods" title="Permanent link">&para;</a></h3>
2777+
<ul>
2778+
<li><code>sb.cdp.click(selector)</code></li>
2779+
<li><code>sb.cdp.click_if_visible(selector)</code></li>
2780+
<li><code>sb.cdp.type(selector, text)</code></li>
2781+
<li><code>sb.cdp.press_keys(selector, text)</code></li>
2782+
<li><code>sb.cdp.select_all(selector)</code></li>
2783+
<li><code>sb.cdp.get_text(selector)</code></li>
2784+
</ul>
2785+
<p>When <code>type()</code> is too fast, use the slower <code>press_keys()</code> to avoid detection. You can also use <code>sb.sleep(seconds)</code> to slow things down.</p>
2786+
<p>To use WebDriver methods again, call:</p>
2787+
<ul>
2788+
<li><strong><code>sb.reconnect()</code></strong> or <strong><code>sb.connect()</code></strong></li>
2789+
</ul>
2790+
<p>(Note that reconnecting allows anti-bots to detect you, so only reconnect if it is safe to do so.)</p>
2791+
<p>To disconnect again, call:</p>
2792+
<ul>
2793+
<li><strong><code>sb.disconnect()</code></strong></li>
2794+
</ul>
2795+
<p>While disconnected, if you accidentally call a WebDriver method, then SeleniumBase will attempt to use the CDP Mode version of that method (if available). For example, if you accidentally call <code>sb.click(selector)</code> instead of <code>sb.cdp.click(selector)</code>, then your WebDriver call will automatically be redirected to the CDP Mode version. Not all WebDriver methods have a matching CDP Mode method. In that scenario, calling a WebDriver method while disconnected could raise an error, or make WebDriver automatically reconnect first.</p>
2796+
<p>To find out if WebDriver is connected or disconnected, call:</p>
2797+
<ul>
2798+
<li><strong><code>sb.is_connected()</code></strong></li>
2799+
</ul>
27572800
<hr />
27582801
<h3 id="cdp-mode-examples">🐙 <b translate="no">CDP Mode</b> examples<a class="headerlink" href="#cdp-mode-examples" title="Permanent link">&para;</a></h3>
27592802
<blockquote>
@@ -2772,13 +2815,15 @@ <h3 id="example-1-pokemon-site-using-incapsulaimperva-protection-with-invisible-
27722815
<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">&quot;en&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">sb</span><span class="p">:</span>
27732816
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;https://www.pokemon.com/us&quot;</span>
27742817
<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>
2775-
<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>
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>
27762819
<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">&quot;button#onetrust-reject-all-handler&quot;</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>
27772821
<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">&#39;a[href=&quot;https://www.pokemon.com/us/pokedex/&quot;]&#39;</span><span class="p">)</span>
27782822
<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>
27792823
<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">&#39;b:contains(&quot;Show Advanced Search&quot;)&#39;</span><span class="p">)</span>
27802824
<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>
27812825
<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">&#39;span[data-type=&quot;type&quot;][data-value=&quot;electric&quot;]&#39;</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>
27822827
<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">&quot;a#advSearch&quot;</span><span class="p">)</span>
27832828
<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>
27842829
<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">&#39;img[src*=&quot;img/pokedex/detail/025.png&quot;]&#39;</span><span class="p">)</span>
@@ -2825,7 +2870,7 @@ <h3 id="example-2-hyatt-site-using-kasada-protection">🔖 Example 2: (Hyatt sit
28252870
<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">&quot;en&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">sb</span><span class="p">:</span>
28262871
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;https://www.hyatt.com/&quot;</span>
28272872
<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>
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>
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>
28292874
<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">&#39;button[aria-label=&quot;Close&quot;]&#39;</span><span class="p">)</span>
28302875
<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>
28312876
<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">&#39;span:contains(&quot;Explore&quot;)&#39;</span><span class="p">)</span>
@@ -2907,10 +2952,14 @@ <h3 id="example-3-bestwestern-site-using-datadome-protection">🔖 Example 3: (B
29072952
<h3 id="cdp-mode-api-methods">🐙 CDP Mode API / Methods<a class="headerlink" href="#cdp-mode-api-methods" title="Permanent link">&para;</a></h3>
29082953
<p>(Some method args have been left out for simplicity. Eg: <code translate="no">timeout</code>)</p>
29092954
<div class="highlight"><pre><span></span><code><span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
2910-
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">reload</span><span class="p">()</span>
2955+
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
2956+
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">reload</span><span class="p">(</span><span class="n">ignore_cache</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">script_to_evaluate_on_load</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
29112957
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">refresh</span><span class="p">()</span>
2958+
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">get_event_loop</span><span class="p">()</span>
29122959
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">add_handler</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">handler</span><span class="p">)</span>
29132960
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">selector</span><span class="p">)</span>
2961+
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">selector</span><span class="p">)</span>
2962+
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">selector</span><span class="p">)</span>
29142963
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">selector</span><span class="p">)</span>
29152964
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">find_elements_by_text</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">tag_name</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
29162965
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">selector</span><span class="p">)</span>
@@ -2924,6 +2973,7 @@ <h3 id="cdp-mode-api-methods">🐙 CDP Mode API / Methods<a class="headerlink" h
29242973
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">clear_cookies</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
29252974
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">seconds</span><span class="p">)</span>
29262975
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">bring_active_window_to_front</span><span class="p">()</span>
2976+
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">bring_to_front</span><span class="p">()</span>
29272977
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">get_active_element</span><span class="p">()</span>
29282978
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">get_active_element_css</span><span class="p">()</span>
29292979
<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="n">selector</span><span class="p">)</span>
@@ -2950,7 +3000,7 @@ <h3 id="cdp-mode-api-methods">🐙 CDP Mode API / Methods<a class="headerlink" h
29503000
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">set_window_rect</span><span class="p">()</span>
29513001
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">reset_window_size</span><span class="p">()</span>
29523002
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">get_window</span><span class="p">()</span>
2953-
<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>
3003+
<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="n">selector</span><span class="p">)</span>
29543004
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">get_title</span><span class="p">()</span>
29553005
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">get_current_url</span><span class="p">()</span>
29563006
<span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">get_origin</span><span class="p">()</span>

search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)