|
411 | 411 | </span> |
412 | 412 | </a> |
413 | 413 |
|
| 414 | +</li> |
| 415 | + |
| 416 | + <li class="md-nav__item"> |
| 417 | + <a href="#proxy-with-auth-in-stealthy-playwright-mode" class="md-nav__link"> |
| 418 | + <span class="md-ellipsis"> |
| 419 | + 🎭 Proxy with auth in Stealthy Playwright Mode: |
| 420 | + </span> |
| 421 | + </a> |
| 422 | + |
414 | 423 | </li> |
415 | 424 |
|
416 | 425 | </ul> |
|
2928 | 2937 | </span> |
2929 | 2938 | </a> |
2930 | 2939 |
|
| 2940 | +</li> |
| 2941 | + |
| 2942 | + <li class="md-nav__item"> |
| 2943 | + <a href="#proxy-with-auth-in-stealthy-playwright-mode" class="md-nav__link"> |
| 2944 | + <span class="md-ellipsis"> |
| 2945 | + 🎭 Proxy with auth in Stealthy Playwright Mode: |
| 2946 | + </span> |
| 2947 | + </a> |
| 2948 | + |
2931 | 2949 | </li> |
2932 | 2950 |
|
2933 | 2951 | </ul> |
@@ -3060,6 +3078,63 @@ <h3 id="stealthy-playwright-mode-examples">🎭 <b translate="no">Stealthy Playw |
3060 | 3078 | <span class="n">sb</span><span class="o">.</span><span class="n">solve_captcha</span><span class="p">()</span> |
3061 | 3079 | <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> |
3062 | 3080 | </code></pre></div> |
| 3081 | +<hr /> |
| 3082 | +<h3 id="proxy-with-auth-in-stealthy-playwright-mode">🎭 Proxy with auth in <b translate="no">Stealthy Playwright Mode</b>:<a class="headerlink" href="#proxy-with-auth-in-stealthy-playwright-mode" title="Permanent link">¶</a></h3> |
| 3083 | +<p>To use an authenticated proxy in Stealthy Playwright Mode, <strong>do these two things</strong>: |
| 3084 | +<strong>1.</strong> Set the<code>proxy</code> arg when launching Chrome. |
| 3085 | +-- Eg: <code>sb_cdp.Chrome(proxy="USER:PASS@IP:PORT")</code> or <code>cdp_driver.start_async("USER:PASS@IP:PORT")</code>. |
| 3086 | +<strong>2.</strong> Open the URL with SeleniumBase <strong>before</strong> using <code>endpoint_url</code> to connect to the browser with Playwright.</p> |
| 3087 | +<p>⚠️ If any trouble with the above, set <code>use_chromium=True</code> so that you can use the base Chromium browser, which still allows extensions, unlike regular branded Chrome, which removed the <code>--load-extension</code> command-line switch. (<em>An extension is used to set the auth for the proxy, which is needed when CDP can't set the proxy alone, such as for navigation after the initial page load</em>).</p> |
| 3088 | +<p>In the sync format, use <code>sb.open(url)</code> to open the url before connecting Playwright: |
| 3089 | +<div class="highlight"><pre><span></span><code><span class="n">sb</span> <span class="o">=</span> <span class="n">sb_cdp</span><span class="o">.</span><span class="n">Chrome</span><span class="p">(</span><span class="n">use_chromium</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">proxy</span><span class="o">=</span><span class="s2">"user:pass@server:port"</span><span class="p">)</span> |
| 3090 | +<span class="n">sb</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">url</span><span class="p">)</span> |
| 3091 | +<span class="n">endpoint_url</span> <span class="o">=</span> <span class="n">sb</span><span class="o">.</span><span class="n">get_endpoint_url</span><span class="p">()</span> |
| 3092 | +<span class="c1"># ...</span> |
| 3093 | +</code></pre></div></p> |
| 3094 | +<p>In the async format, use, <code>driver.get(url)</code> to open the url before connecting Playwright: |
| 3095 | +<div class="highlight"><pre><span></span><code><span class="n">driver</span> <span class="o">=</span> <span class="k">await</span> <span class="n">cdp_driver</span><span class="o">.</span><span class="n">start_async</span><span class="p">(</span><span class="n">use_chromium</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">proxy</span><span class="o">=</span><span class="s2">"user:pass@server:port"</span><span class="p">)</span> |
| 3096 | +<span class="k">await</span> <span class="n">driver</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">)</span> |
| 3097 | +<span class="n">endpoint_url</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">get_endpoint_url</span><span class="p">()</span> |
| 3098 | +<span class="c1"># ...</span> |
| 3099 | +</code></pre></div></p> |
| 3100 | +<p>Here's an example of using an authenticated proxy with Stealthy Playwright Mode: |
| 3101 | +(The URL is opened before attaching Playwright so that proxy settings take effect) |
| 3102 | +<div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">playwright.sync_api</span><span class="w"> </span><span class="kn">import</span> <span class="n">sync_playwright</span> |
| 3103 | +<span class="kn">from</span><span class="w"> </span><span class="nn">seleniumbase</span><span class="w"> </span><span class="kn">import</span> <span class="n">sb_cdp</span> |
| 3104 | + |
| 3105 | +<span class="n">sb</span> <span class="o">=</span> <span class="n">sb_cdp</span><span class="o">.</span><span class="n">Chrome</span><span class="p">(</span><span class="n">use_chromium</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">proxy</span><span class="o">=</span><span class="s2">"user:pass@server:port"</span><span class="p">)</span> |
| 3106 | +<span class="n">sb</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">url</span><span class="p">)</span> |
| 3107 | +<span class="n">endpoint_url</span> <span class="o">=</span> <span class="n">sb</span><span class="o">.</span><span class="n">get_endpoint_url</span><span class="p">()</span> |
| 3108 | + |
| 3109 | +<span class="k">with</span> <span class="n">sync_playwright</span><span class="p">()</span> <span class="k">as</span> <span class="n">p</span><span class="p">:</span> |
| 3110 | + <span class="n">browser</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">chromium</span><span class="o">.</span><span class="n">connect_over_cdp</span><span class="p">(</span><span class="n">endpoint_url</span><span class="p">)</span> |
| 3111 | + <span class="n">context</span> <span class="o">=</span> <span class="n">browser</span><span class="o">.</span><span class="n">contexts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> |
| 3112 | + <span class="n">page</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">pages</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> |
| 3113 | + <span class="c1"># ...</span> |
| 3114 | +</code></pre></div> |
| 3115 | +(Fill in the <code>url</code> and the <code>proxy</code> details to complete the script.)</p> |
| 3116 | +<p>Here's the same thing for the <code>async</code> format: |
| 3117 | +<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">asyncio</span> |
| 3118 | +<span class="kn">from</span><span class="w"> </span><span class="nn">playwright.async_api</span><span class="w"> </span><span class="kn">import</span> <span class="n">async_playwright</span> |
| 3119 | +<span class="kn">from</span><span class="w"> </span><span class="nn">seleniumbase</span><span class="w"> </span><span class="kn">import</span> <span class="n">cdp_driver</span> |
| 3120 | + |
| 3121 | +<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span> |
| 3122 | + <span class="n">driver</span> <span class="o">=</span> <span class="k">await</span> <span class="n">cdp_driver</span><span class="o">.</span><span class="n">start_async</span><span class="p">(</span><span class="n">use_chromium</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">proxy</span><span class="o">=</span><span class="s2">"user:pass@server:port"</span><span class="p">)</span> |
| 3123 | + <span class="k">await</span> <span class="n">driver</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">)</span> |
| 3124 | + <span class="n">endpoint_url</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">get_endpoint_url</span><span class="p">()</span> |
| 3125 | + |
| 3126 | + <span class="k">async</span> <span class="k">with</span> <span class="n">async_playwright</span><span class="p">()</span> <span class="k">as</span> <span class="n">p</span><span class="p">:</span> |
| 3127 | + <span class="n">browser</span> <span class="o">=</span> <span class="k">await</span> <span class="n">p</span><span class="o">.</span><span class="n">chromium</span><span class="o">.</span><span class="n">connect_over_cdp</span><span class="p">(</span><span class="n">endpoint_url</span><span class="p">)</span> |
| 3128 | + <span class="n">context</span> <span class="o">=</span> <span class="n">browser</span><span class="o">.</span><span class="n">contexts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> |
| 3129 | + <span class="n">page</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">pages</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> |
| 3130 | + <span class="c1"># ...</span> |
| 3131 | + |
| 3132 | +<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> |
| 3133 | + <span class="n">loop</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">new_event_loop</span><span class="p">()</span> |
| 3134 | + <span class="n">loop</span><span class="o">.</span><span class="n">run_until_complete</span><span class="p">(</span><span class="n">main</span><span class="p">())</span> |
| 3135 | +</code></pre></div> |
| 3136 | +(Fill in the <code>url</code> and the <code>proxy</code> details to complete the script.)</p> |
| 3137 | +<hr /> |
3063 | 3138 | <p>For more examples, see <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode/playwright">examples/cdp_mode/playwright</a>.</p> |
3064 | 3139 | <hr /> |
3065 | 3140 | <p><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/logo6.png" alt="SeleniumBase" title="SeleniumBase" width="100" /></a><img src="https://seleniumbase.github.io/other/playwright_logo.png" alt="Playwright" title="Playwright" width="161"></p> |
|
0 commit comments