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 291167e

Browse files
authored
Merge pull request #3508 from seleniumbase/cdp-mode-patch-32
CDP Mode - Patch 32 (and more)
2 parents 36b8f78 + 6e83392 commit 291167e

File tree

16 files changed

+73
-18
lines changed

16 files changed

+73
-18
lines changed

‎examples/cdp_mode/ReadMe.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,7 @@ sb.cdp.flash(selector, duration=1, color="44CC88", pause=0)
405405
sb.cdp.highlight(selector)
406406
sb.cdp.focus(selector)
407407
sb.cdp.highlight_overlay(selector)
408+
sb.cdp.get_parent(element)
408409
sb.cdp.remove_element(selector)
409410
sb.cdp.remove_from_dom(selector)
410411
sb.cdp.remove_elements(selector)
@@ -522,6 +523,7 @@ element.get_position()
522523
element.get_html()
523524
element.get_js_attributes()
524525
element.get_attribute(attribute)
526+
element.get_parent()
525527
```
526528

527529
--------

‎examples/cdp_mode/raw_cf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
with SB(uc=True, test=True, locale_code="en") as sb:
55
url = "https://www.cloudflare.com/login"
66
sb.activate_cdp_mode(url)
7-
sb.sleep(2)
7+
sb.sleep(3)
88
sb.uc_gui_handle_captcha() # PyAutoGUI press Tab and Spacebar
99
sb.sleep(2)
1010

‎examples/cdp_mode/raw_chatgpt.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,18 @@
44
with SB(uc=True, test=True, ad_block=True) as sb:
55
url = "https://chatgpt.com/"
66
sb.activate_cdp_mode(url)
7+
sb.sleep(1)
8+
sb.click_if_visible('button[aria-label="Close dialog"]')
79
query = "Compare Playwright to SeleniumBase in under 178 words"
810
sb.press_keys("#prompt-textarea", query)
911
sb.click('button[data-testid="send-button"]')
1012
print('*** Input for ChatGPT: ***\n"%s"' % query)
13+
sb.sleep(3)
1114
with suppress(Exception):
12-
# The "Send" button reappears when ChatGPT is done typing a response
13-
sb.wait_for_element('button[data-testid="send-button"]', timeout=22)
15+
# The "Stop" button disappears when ChatGPT is done typing a response
16+
sb.wait_for_element_not_visible(
17+
'button[data-testid="stop-button"]', timeout=20
18+
)
1419
chat = sb.find_element('[data-message-author-role="assistant"] .markdown')
1520
soup = sb.get_beautiful_soup(chat.get_html()).get_text("\n").strip()
1621
print("*** Response from ChatGPT: ***\n%s" % soup.replace("\n:", ":"))

‎examples/cdp_mode/raw_xhr_async.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ async def crawl():
6565
# Change url to something that makes ajax requests
6666
tab = await driver.get("https://learn.microsoft.com/en-us/")
6767
time.sleep(2)
68-
for i in range(75):
69-
await tab.scroll_down(3)
68+
for i in range(20):
69+
await tab.scroll_down(4)
7070
time.sleep(0.02)
7171

7272
xhr_responses = await receiveXHR(tab, xhr_requests)
@@ -87,6 +87,5 @@ async def crawl():
8787

8888
if __name__ == "__main__":
8989
print("<============= START: XHR Example =============>")
90-
loop = asyncio.new_event_loop()
91-
loop.run_until_complete(crawl())
90+
asyncio.run(crawl())
9291
print("<============== END: XHR Example ==============>")

‎examples/cdp_mode/raw_xhr_sb.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ async def receiveXHR(page, requests):
6464
# Change url to something that makes ajax requests
6565
sb.cdp.open("https://learn.microsoft.com/en-us/")
6666
time.sleep(2)
67-
for i in range(15):
68-
sb.cdp.scroll_down(15)
67+
for i in range(10):
68+
sb.cdp.scroll_down(8)
6969

7070
loop = sb.cdp.get_event_loop()
7171
xhr_responses = loop.run_until_complete(receiveXHR(tab, xhr_requests))

‎examples/raw_games.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
"""SB Manager using UC Mode for evading bot-detection."""
22
from seleniumbase import SB
33

4-
with SB(uc=True, test=True) as sb:
4+
with SB(uc=True, test=True, disable_csp=True) as sb:
55
url = "https://steamdb.info/"
66
sb.uc_open_with_reconnect(url, 3)
77
sb.uc_click("a.header-login span", 3)
88
sb.uc_gui_click_captcha()
9-
sb.assert_text("Sign in", "button#js-sign-in")
9+
sb.assert_text("Sign in", "button#js-sign-in", timeout=4)
1010
sb.uc_click("button#js-sign-in", 2)
1111
sb.highlight("div.page_content form")
1212
sb.highlight('button:contains("Sign in")', scroll=False)
13-
sb.sleep(1)
13+
sb.set_messenger_theme(location="top_center")
14+
sb.post_message("SeleniumBase wasn't detected", duration=4)

‎help_docs/method_summary.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ self.set_attributes(selector, attribute, value, by="css selector")
8282
self.remove_attribute(selector, attribute, by="css selector", timeout=None)
8383
self.remove_attributes(selector, attribute, by="css selector")
8484
self.internalize_links()
85+
self.get_parent(element, by="css selector", timeout=None)
8586
self.get_property(selector, property, by="css selector", timeout=None)
8687
self.get_text_content(selector="html", by="css selector", timeout=None)
8788
self.get_property_value(selector, property, by="css selector", timeout=None)
@@ -743,6 +744,8 @@ driver.highlight_if_visible(selector)
743744
driver.sleep(seconds)
744745
driver.locator(selector)
745746
driver.get_attribute(selector, attribute)
747+
driver.get_parent(element)
748+
driver.get_current_url()
746749
driver.get_page_source()
747750
driver.get_title()
748751
driver.switch_to_frame(frame="iframe")

‎requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pip>=25.0
1+
pip>=25.0.1
22
packaging>=24.2
33
setuptools~=70.2;python_version<"3.10"
44
setuptools>=75.8.0;python_version>="3.10"
@@ -70,7 +70,7 @@ rich==13.9.4
7070
# ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
7171

7272
coverage>=7.6.1;python_version<"3.9"
73-
coverage>=7.6.10;python_version>="3.9"
73+
coverage>=7.6.12;python_version>="3.9"
7474
pytest-cov>=5.0.0;python_version<"3.9"
7575
pytest-cov>=6.0.0;python_version>="3.9"
7676
flake8==5.0.4;python_version<"3.9"

‎seleniumbase/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "4.34.12"
2+
__version__ = "4.34.13"

‎seleniumbase/core/browser_launcher.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ def extend_driver(driver):
220220
driver.highlight_if_visible = DM.highlight_if_visible
221221
driver.sleep = time.sleep
222222
driver.get_attribute = DM.get_attribute
223+
driver.get_parent = DM.get_parent
223224
driver.get_current_url = DM.get_current_url
224225
driver.get_page_source = DM.get_page_source
225226
driver.get_title = DM.get_title
@@ -647,6 +648,7 @@ def uc_open_with_cdp_mode(driver, url=None):
647648
cdp.click_if_visible = CDPM.click_if_visible
648649
cdp.click_visible_elements = CDPM.click_visible_elements
649650
cdp.mouse_click = CDPM.mouse_click
651+
cdp.get_parent = CDPM.get_parent
650652
cdp.remove_element = CDPM.remove_element
651653
cdp.remove_from_dom = CDPM.remove_from_dom
652654
cdp.remove_elements = CDPM.remove_elements
@@ -5394,6 +5396,19 @@ def get_local_driver(
53945396
)
53955397
driver._is_hidden = (headless or headless2)
53965398
driver._is_using_uc = True
5399+
with suppress(Exception):
5400+
if int(uc_driver_version) >= 133:
5401+
for window_handle in driver.window_handles:
5402+
driver.switch_to.window(window_handle)
5403+
if driver.current_url.startswith(
5404+
"chrome-extension://"
5405+
):
5406+
driver.close()
5407+
time.sleep(0.003)
5408+
driver.switch_to.window(driver.window_handles[0])
5409+
time.sleep(0.003)
5410+
driver.connect()
5411+
time.sleep(0.003)
53975412
if mobile_emulator:
53985413
uc_metrics = {}
53995414
if (

0 commit comments

Comments
(0)

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