|
928 | 928 | </span>
|
929 | 929 | </a>
|
930 | 930 |
|
| 931 | +</li> |
| 932 | + |
| 933 | + <li class="md-nav__item"> |
| 934 | + <a href="#example-4-walmart-site-using-akamai-protection-with-perimeterx" class="md-nav__link"> |
| 935 | + <span class="md-ellipsis"> |
| 936 | + 🔖 Example 4: (Walmart site using Akamai protection with PerimeterX) |
| 937 | + </span> |
| 938 | + </a> |
| 939 | + |
| 940 | +</li> |
| 941 | + |
| 942 | + <li class="md-nav__item"> |
| 943 | + <a href="#example-5-nike-site-using-shape-security" class="md-nav__link"> |
| 944 | + <span class="md-ellipsis"> |
| 945 | + 🔖 Example 5: (Nike site using Shape Security) |
| 946 | + </span> |
| 947 | + </a> |
| 948 | + |
931 | 949 | </li>
|
932 | 950 |
|
933 | 951 | <li class="md-nav__item">
|
|
2707 | 2725 | </span>
|
2708 | 2726 | </a>
|
2709 | 2727 |
|
| 2728 | +</li> |
| 2729 | + |
| 2730 | + <li class="md-nav__item"> |
| 2731 | + <a href="#example-4-walmart-site-using-akamai-protection-with-perimeterx" class="md-nav__link"> |
| 2732 | + <span class="md-ellipsis"> |
| 2733 | + 🔖 Example 4: (Walmart site using Akamai protection with PerimeterX) |
| 2734 | + </span> |
| 2735 | + </a> |
| 2736 | + |
| 2737 | +</li> |
| 2738 | + |
| 2739 | + <li class="md-nav__item"> |
| 2740 | + <a href="#example-5-nike-site-using-shape-security" class="md-nav__link"> |
| 2741 | + <span class="md-ellipsis"> |
| 2742 | + 🔖 Example 5: (Nike site using Shape Security) |
| 2743 | + </span> |
| 2744 | + </a> |
| 2745 | + |
2710 | 2746 | </li>
|
2711 | 2747 |
|
2712 | 2748 | <li class="md-nav__item">
|
@@ -2890,7 +2926,7 @@ <h3 id="example-2-hyatt-site-using-kasada-protection">🔖 Example 2: (Hyatt sit
|
2890 | 2926 | <span class="s1">'div[data-booking-status="BOOKABLE"] [class*="HotelCard_header"]'</span>
|
2891 | 2927 | <span class="p">)</span>
|
2892 | 2928 | <span class="n">hotel_prices</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>
|
2893 |
| - <span class="s1">'div[data-booking-status="BOOKABLE"] div.rate-currency'</span> |
| 2929 | + <span class="s1">'div[data-booking-status="BOOKABLE"] div.rate'</span> |
2894 | 2930 | <span class="p">)</span>
|
2895 | 2931 | <span class="n">sb</span><span class="o">.</span><span class="n">assert_true</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">hotel_names</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">hotel_prices</span><span class="p">))</span>
|
2896 | 2932 | <span class="nb">print</span><span class="p">(</span><span class="s2">"Hyatt 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>
|
@@ -2946,6 +2982,80 @@ <h3 id="example-3-bestwestern-site-using-datadome-protection">🔖 Example 3: (B
|
2946 | 2982 |
|
2947 | 2983 | </details>
|
2948 | 2984 |
|
| 2985 | +<h3 id="example-4-walmart-site-using-akamai-protection-with-perimeterx">🔖 Example 4: (Walmart site using Akamai protection with PerimeterX)<a class="headerlink" href="#example-4-walmart-site-using-akamai-protection-with-perimeterx" title="Permanent link">¶</a></h3> |
| 2986 | +<ul> |
| 2987 | +<li><a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode/raw_walmart.py">SeleniumBase/examples/cdp_mode/raw_walmart.py</a></li> |
| 2988 | +</ul> |
| 2989 | +<div></div> |
| 2990 | +<details> |
| 2991 | +<summary> ▶️ (<b>Click to expand code preview</b>)</summary> |
| 2992 | + |
| 2993 | +<div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">seleniumbase</span> <span class="kn">import</span> <span class="n">SB</span> |
| 2994 | + |
| 2995 | +<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> |
| 2996 | + <span class="n">url</span> <span class="o">=</span> <span class="s2">"https://www.walmart.com/"</span> |
| 2997 | + <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> |
| 2998 | + <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> |
| 2999 | + <span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">mouse_click</span><span class="p">(</span><span class="s1">'input[aria-label="Search"]'</span><span class="p">)</span> |
| 3000 | + <span class="n">sb</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">1.2</span><span class="p">)</span> |
| 3001 | + <span class="n">search</span> <span class="o">=</span> <span class="s2">"Settlers of Catan Board Game"</span> |
| 3002 | + <span class="n">required_text</span> <span class="o">=</span> <span class="s2">"Catan"</span> |
| 3003 | + <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="s1">'input[aria-label="Search"]'</span><span class="p">,</span> <span class="n">search</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> |
| 3004 | + <span class="n">sb</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">3.8</span><span class="p">)</span> |
| 3005 | + <span class="nb">print</span><span class="p">(</span><span class="s1">'*** Walmart Search for "</span><span class="si">%s</span><span class="s1">":'</span> <span class="o">%</span> <span class="n">search</span><span class="p">)</span> |
| 3006 | + <span class="nb">print</span><span class="p">(</span><span class="s1">' (Results must contain "</span><span class="si">%s</span><span class="s1">".)'</span> <span class="o">%</span> <span class="n">required_text</span><span class="p">)</span> |
| 3007 | + <span class="n">unique_item_text</span> <span class="o">=</span> <span class="p">[]</span> |
| 3008 | + <span class="n">items</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">find_elements</span><span class="p">(</span><span class="s1">'div[data-testid="list-view"]'</span><span class="p">)</span> |
| 3009 | + <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span> |
| 3010 | + <span class="k">if</span> <span class="n">required_text</span> <span class="ow">in</span> <span class="n">item</span><span class="o">.</span><span class="n">text</span><span class="p">:</span> |
| 3011 | + <span class="n">description</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">querySelector</span><span class="p">(</span> |
| 3012 | + <span class="s1">'[data-automation-id="product-price"] + span'</span> |
| 3013 | + <span class="p">)</span> |
| 3014 | + <span class="k">if</span> <span class="n">description</span> <span class="ow">and</span> <span class="n">description</span><span class="o">.</span><span class="n">text</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">unique_item_text</span><span class="p">:</span> |
| 3015 | + <span class="n">unique_item_text</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">description</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> |
| 3016 | + <span class="nb">print</span><span class="p">(</span><span class="s2">"* "</span> <span class="o">+</span> <span class="n">description</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> |
| 3017 | + <span class="n">price</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">querySelector</span><span class="p">(</span> |
| 3018 | + <span class="s1">'[data-automation-id="product-price"]'</span> |
| 3019 | + <span class="p">)</span> |
| 3020 | + <span class="k">if</span> <span class="n">price</span><span class="p">:</span> |
| 3021 | + <span class="n">price_text</span> <span class="o">=</span> <span class="n">price</span><span class="o">.</span><span class="n">text</span> |
| 3022 | + <span class="n">price_text</span> <span class="o">=</span> <span class="n">price_text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"current price Now "</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> |
| 3023 | + <span class="n">price_text</span> <span class="o">=</span> <span class="n">price_text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"current price "</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> |
| 3024 | + <span class="n">price_text</span> <span class="o">=</span> <span class="n">price_text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">" "</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> |
| 3025 | + <span class="nb">print</span><span class="p">(</span><span class="s2">" ("</span> <span class="o">+</span> <span class="n">price_text</span> <span class="o">+</span> <span class="s2">")"</span><span class="p">)</span> |
| 3026 | +</code></pre></div> |
| 3027 | + |
| 3028 | +</details> |
| 3029 | + |
| 3030 | +<h3 id="example-5-nike-site-using-shape-security">🔖 Example 5: (Nike site using Shape Security)<a class="headerlink" href="#example-5-nike-site-using-shape-security" title="Permanent link">¶</a></h3> |
| 3031 | +<ul> |
| 3032 | +<li><a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode/raw_nike.py">SeleniumBase/examples/cdp_mode/raw_nike.py</a></li> |
| 3033 | +</ul> |
| 3034 | +<div></div> |
| 3035 | +<details> |
| 3036 | +<summary> ▶️ (<b>Click to expand code preview</b>)</summary> |
| 3037 | + |
| 3038 | +<div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">seleniumbase</span> <span class="kn">import</span> <span class="n">SB</span> |
| 3039 | + |
| 3040 | +<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> |
| 3041 | + <span class="n">url</span> <span class="o">=</span> <span class="s2">"https://www.nike.com/"</span> |
| 3042 | + <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> |
| 3043 | + <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> |
| 3044 | + <span class="n">sb</span><span class="o">.</span><span class="n">cdp</span><span class="o">.</span><span class="n">gui_click_element</span><span class="p">(</span><span class="s1">'div[data-testid="user-tools-container"]'</span><span class="p">)</span> |
| 3045 | + <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> |
| 3046 | + <span class="n">search</span> <span class="o">=</span> <span class="s2">"Nike Air Force 1"</span> |
| 3047 | + <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="s1">'input[type="search"]'</span><span class="p">,</span> <span class="n">search</span><span class="p">)</span> |
| 3048 | + <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> |
| 3049 | + <span class="n">elements</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><span class="s1">'ul[data-testid*="products"] figure .details'</span><span class="p">)</span> |
| 3050 | + <span class="k">if</span> <span class="n">elements</span><span class="p">:</span> |
| 3051 | + <span class="nb">print</span><span class="p">(</span><span class="s1">'**** Found results for "</span><span class="si">%s</span><span class="s1">": ****'</span> <span class="o">%</span> <span class="n">search</span><span class="p">)</span> |
| 3052 | + <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">elements</span><span class="p">:</span> |
| 3053 | + <span class="nb">print</span><span class="p">(</span><span class="s2">"* "</span> <span class="o">+</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> |
| 3054 | + <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> |
| 3055 | +</code></pre></div> |
| 3056 | + |
| 3057 | +</details> |
| 3058 | + |
2949 | 3059 | <p>(<b>Note:</b> Extra <code translate="no">sb.sleep()</code> calls have been added to prevent bot-detection because some sites will flag you as a bot if you perform actions too quickly.)</p>
|
2950 | 3060 | <p>(<b>Note:</b> Some sites may IP-block you for 36 hours or more if they catch you using regular <span translate="no">Selenium WebDriver</span>. Be extra careful when creating and/or modifying automation scripts that run on them.)</p>
|
2951 | 3061 | <hr />
|
|
0 commit comments