Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 77ee514

Browse files
committed
Update the documentation
1 parent a3c710e commit 77ee514

File tree

3 files changed

+166
-5
lines changed

3 files changed

+166
-5
lines changed

‎README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md">🎖️ GUI</a> |
3636
<a href="https://seleniumbase.io/demo_page">📰 TestPage</a> |
3737
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/case_plans.md">🗂️ CasePlans</a> |
38-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/html_inspector.md">🕵️ Inspector</a> |
38+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md">👤 UC Mode</a> |
3939
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">🧬 Hybrid</a> |
4040
<a href="https://seleniumbase.io/devices/?url=seleniumbase.com">💻 Farm</a>
4141
<br />

‎help_docs/uc_mode.md

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
<!-- SeleniumBase Docs -->
2+
3+
## [<img src="https://seleniumbase.github.io/img/logo6.png" title="SeleniumBase" width="32">](https://github.com/seleniumbase/SeleniumBase/) UC Mode 👤
4+
5+
👤 SeleniumBase <b>UC Mode</b> (Undetected-Chromedriver Mode) allows bots to appear human, which lets them evade detection from anti-bot services that try to block them or trigger CAPTCHAs on various websites.
6+
7+
<!-- YouTube View --><a href="https://www.youtube.com/watch?v=5dMFI3e85ig"><img src="http://img.youtube.com/vi/5dMFI3e85ig/0.jpg" title="SeleniumBase on YouTube" width="335" /></a>
8+
<!-- GitHub Only --><p>(<b><a href="https://www.youtube.com/watch?v=5dMFI3e85ig">Watch the UC Mode tutorial on YouTube</a></b>)</p>
9+
10+
👤 <b>UC Mode</b> is based on [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver), but includes multiple updates, fixes, and improvements to support a wider range of features and edge cases:
11+
12+
* Includes driver version-detection & management.
13+
* Allows mismatched browser/driver versions.
14+
* Automatically changes the user agent to prevent detection. (`HeadlessChrome` to `Chrome`)
15+
* Automatically disconnects chromedriver from Chrome as needed. (And reconnects)
16+
* Supports multithreaded tests in parallel via `pytest-xdist`.
17+
* Adjusts configuration based on the environment. (Linux/Ubuntu vs Windows vs macOS)
18+
* Has options for setting proxy and proxy-with-auth.
19+
* Has ways of adjusting timings from default values.
20+
* Includes multiple ways of structuring test scripts.
21+
22+
👤 Here's an example with the `Driver` manager:
23+
24+
```python
25+
from seleniumbase import Driver
26+
27+
driver = Driver(uc=True)
28+
driver.uc_open_with_reconnect("https://nowsecure.nl/#relax", 5)
29+
driver.quit()
30+
```
31+
32+
👤 Here's an example with the `SB` manager: (Has more methods than the `Driver` format, and also quits the driver automatically after the `with` block ends.)
33+
34+
```python
35+
from seleniumbase import SB
36+
37+
with SB(uc=True) as sb:
38+
sb.driver.uc_open_with_reconnect("https://nowsecure.nl/#relax", 5)
39+
```
40+
41+
👤 Here's a longer example, which includes retries and a captcha-click failsafe for bypassing detection:
42+
43+
```python
44+
from seleniumbase import SB
45+
46+
with SB(uc=True, test=True) as sb:
47+
sb.driver.uc_open_with_tab("https://nowsecure.nl/#relax")
48+
sb.sleep(1.2)
49+
if not sb.is_text_visible("OH YEAH, you passed!", "h1"):
50+
sb.get_new_driver(undetectable=True)
51+
sb.driver.uc_open_with_reconnect(
52+
"https://nowsecure.nl/#relax", reconnect_time=3
53+
)
54+
sb.sleep(1.2)
55+
if not sb.is_text_visible("OH YEAH, you passed!", "h1"):
56+
if sb.is_element_visible('iframe[src*="challenge"]'):
57+
with sb.frame_switch('iframe[src*="challenge"]'):
58+
sb.click("span.mark")
59+
sb.sleep(2)
60+
sb.activate_demo_mode()
61+
sb.assert_text("OH YEAH, you passed!", "h1", timeout=3)
62+
```
63+
64+
👤 Here's an example where clicking the checkbox is required, even for humans: (Commonly seen with forms that are CAPTCHA-protected.)
65+
66+
```python
67+
from seleniumbase import SB
68+
69+
def open_the_turnstile_page(sb):
70+
sb.driver.uc_open_with_reconnect(
71+
"https://seleniumbase.io/apps/turnstile", reconnect_time=2.5,
72+
)
73+
74+
def click_turnstile_and_verify(sb):
75+
sb.driver.uc_switch_to_frame("iframe")
76+
sb.driver.uc_click("span.mark")
77+
sb.assert_element("img#captcha-success", timeout=3.33)
78+
79+
with SB(uc=True, test=True) as sb:
80+
open_the_turnstile_page(sb)
81+
try:
82+
click_turnstile_and_verify(sb)
83+
except Exception:
84+
open_the_turnstile_page(sb)
85+
click_turnstile_and_verify(sb)
86+
sb.set_messenger_theme(location="top_left")
87+
sb.post_message("Selenium wasn't detected!", duration=3)
88+
```
89+
90+
### 👤 Here are some examples that use UC Mode:
91+
* [SeleniumBase/examples/verify_undetected.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/verify_undetected.py)
92+
* [SeleniumBase/examples/uc_cdp_events.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/uc_cdp_events.py)
93+
* [SeleniumBase/examples/raw_uc_mode.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_uc_mode.py)
94+
95+
### 👤 Here are some UC Mode examples where clicking is required:
96+
* [SeleniumBase/examples/raw_turnstile.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_turnstile.py)
97+
* [SeleniumBase/examples/raw_form_turnstile.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_form_turnstile.py)
98+
99+
### 👤 Here are `driver`-specific methods added by SeleniumBase for UC Mode: `--uc` / `uc=True`
100+
101+
```python
102+
driver.uc_open(url)
103+
104+
driver.uc_open_with_tab(url)
105+
106+
driver.uc_open_with_reconnect(url, reconnect_time=None)
107+
108+
driver.reconnect(timeout)
109+
110+
driver.uc_click(
111+
selector, by="css selector",
112+
timeout=settings.SMALL_TIMEOUT, reconnect_time=None)
113+
114+
driver.uc_switch_to_frame(frame)
115+
```
116+
117+
(Note that the `reconnect_time` is used to specify how long the driver should be disconnected from Chrome to prevent detection before reconnecting again.)
118+
119+
👤 Since `driver.get(url)` is slower in UC Mode for bypassing detection, use `driver.default_get(url)` for a standard page load instead:
120+
121+
```python
122+
driver.default_get(url) # Faster, but Selenium can be detected
123+
```
124+
125+
👤 Here are some examples of using those special UC Mode methods: (Use `self.driver` for `BaseCase` formats. Use `sb.driver` for `SB()` formats):
126+
127+
```python
128+
driver.uc_open_with_reconnect("https://nowsecure.nl/#relax", reconnect_time=5)
129+
driver.uc_open_with_reconnect("https://nowsecure.nl/#relax", 5)
130+
131+
driver.reconnect(5)
132+
driver.reconnect(timeout=5)
133+
```
134+
135+
👤 You can also set the `reconnect_time` / `timeout` to `"breakpoint"` as a valid option. This allows the user to perform manual actions (until typing `c` and pressing ENTER to continue from the breakpoint):
136+
137+
```python
138+
driver.uc_open_with_reconnect("https://nowsecure.nl/#relax", reconnect_time="breakpoint")
139+
driver.uc_open_with_reconnect("https://nowsecure.nl/#relax", "breakpoint")
140+
141+
driver.reconnect(timeout="breakpoint")
142+
driver.reconnect("breakpoint")
143+
```
144+
145+
(Note that while the special UC Mode breakpoint is active, you can't issue Selenium commands to the browser, and the browser can't detect Selenium.)
146+
147+
👤 The two main causes of getting detected in UC Mode (which are both easily handled) are:
148+
* Timing. (UC Mode methods let you customize default values that aren't good enough for your environment.)
149+
* Not using `driver.uc_click(selector)` when you need to remain undetected while clicking something.
150+
151+
👤 To find out if UC Mode will work at all on a specific site (before adjusting for timing), load your site with the following script:
152+
153+
```python
154+
from seleniumbase import SB
155+
156+
with SB(uc=True) as sb:
157+
sb.driver.uc_open_with_reconnect(URL, reconnect_time="breakpoint")
158+
```
159+
160+
(If you remain undetected while loading the page and performing manual actions, then you know you can create a working script once you swap the breakpoint with a time, and add special methods like `uc_click` as needed.)

‎mkdocs.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ edit_uri: ""
1010
site_dir: "site"
1111
docs_dir: "mkdocs_build"
1212
# Copyright
13-
copyright: Copyright &copy; 2014 - 2023 Michael Mintz
13+
copyright: Copyright &copy; 2014 - 2024 Michael Mintz
1414
# Extensions
1515
markdown_extensions:
1616
- admonition
@@ -113,13 +113,14 @@ nav:
113113
- 📶 Chart Maker: examples/chart_maker/ReadMe.md
114114
- 🎞️ Presentation Maker: examples/presenter/ReadMe.md
115115
- Integrations:
116-
- 📱 Mobile Testing: help_docs/mobile_testing.md
116+
- 👤 UC Mode: help_docs/uc_mode.md
117117
- 🤖 GitHub CI: integrations/github/workflows/ReadMe.md
118+
- 🛂 MasterQA: seleniumbase/masterqa/ReadMe.md
118119
- 🗂️ Case Plans: help_docs/case_plans.md
120+
- 📱 Mobile Mode: help_docs/mobile_testing.md
121+
- 🌐 Selenium Grid: seleniumbase/utilities/selenium_grid/ReadMe.md
119122
- 🖼️ Visual Testing: examples/visual_testing/ReadMe.md
120123
- 🕵️ The HTML Inspector: help_docs/html_inspector.md
121-
- 🌐 Selenium Grid: seleniumbase/utilities/selenium_grid/ReadMe.md
122-
- 🛂 MasterQA: seleniumbase/masterqa/ReadMe.md
123124
- 🤖 Azure Pipelines: integrations/azure/azure_pipelines/ReadMe.md
124125
- 🤖 Jenkins on Azure: integrations/azure/jenkins/ReadMe.md
125126
- 🤖 Jenkins on Google Cloud: integrations/google_cloud/ReadMe.md

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /