Skip to content

Commit c495286

Browse files
authored
Merge pull request #2948 from seleniumbase/handle-uc-mode-edge-cases
Handle UC Mode edge cases
2 parents 924bcf3 + 0fece2a commit c495286

File tree

6 files changed

+22
-8
lines changed

6 files changed

+22
-8
lines changed

examples/raw_form_turnstile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
sb.click('span:contains("9:00 PM")')
1313
sb.highlight_click('input[value="AR"] + span')
1414
sb.click('input[value="cc"] + span')
15-
sb.scroll_to("iframe")
15+
sb.scroll_to("div.cf-turnstile-wrapper")
1616
sb.uc_gui_handle_cf()
1717
sb.highlight("img#captcha-success", timeout=3)
1818
sb.highlight_click('button:contains("Request & Pay")')

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ pluggy==1.2.0;python_version<"3.8"
4646
pluggy==1.5.0;python_version>="3.8"
4747
py==1.11.0
4848
pytest==7.4.4;python_version<"3.8"
49-
pytest==8.2.1;python_version>="3.8"
49+
pytest==8.3.1;python_version>="3.8"
5050
pytest-html==2.0.1
5151
pytest-metadata==3.0.0;python_version<"3.8"
5252
pytest-metadata==3.1.1;python_version>="3.8"

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.28.6"
2+
__version__ = "4.28.7"

seleniumbase/core/browser_launcher.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,8 @@ def get_gui_element_position(driver, selector):
680680
viewport_height = driver.execute_script("return window.innerHeight;")
681681
viewport_x = window_rect["x"] + element_rect["x"]
682682
viewport_y = window_bottom_y - viewport_height + element_rect["y"]
683+
y_scroll_offset = driver.execute_script("return window.pageYOffset;")
684+
viewport_y = viewport_y - y_scroll_offset
683685
return (viewport_x, viewport_y)
684686

685687

@@ -688,7 +690,7 @@ def _uc_gui_click_x_y(driver, x, y, timeframe=0.25, uc_lock=False):
688690
import pyautogui
689691
pyautogui = get_configured_pyautogui(pyautogui)
690692
screen_width, screen_height = pyautogui.size()
691-
if x > screen_width or y > screen_height:
693+
if x < 0 or y < 0 or x > screen_width or y > screen_height:
692694
raise Exception(
693695
"PyAutoGUI cannot click on point (%s, %s)"
694696
" outside screen. (Width: %s, Height: %s)"
@@ -807,6 +809,16 @@ def _uc_gui_click_captcha(
807809
frame = '[data-callback="onCaptchaSuccess"]'
808810
else:
809811
return
812+
if driver.is_element_present('form[class*=center]'):
813+
script = (
814+
"""var $elements = document.querySelectorAll('form');
815+
var index = 0, length = $elements.length;
816+
for(; index < length; index++){
817+
the_class = $elements[index].getAttribute('class');
818+
new_class = the_class.replaceAll('center', 'left');
819+
$elements[index].setAttribute('class', new_class);}"""
820+
)
821+
driver.execute_script(script)
810822
if not is_in_frame or needs_switch:
811823
# Currently not in frame (or nested frame outside CF one)
812824
try:
@@ -977,7 +989,7 @@ def uc_gui_handle_cf(driver, frame="iframe"):
977989
return
978990
try:
979991
found_checkbox = False
980-
for i in range(10):
992+
for i in range(24):
981993
pyautogui.press("\t")
982994
time.sleep(0.02)
983995
active_element_css = js_utils.get_active_element_css(driver)
@@ -987,7 +999,6 @@ def uc_gui_handle_cf(driver, frame="iframe"):
987999
time.sleep(0.02)
9881000
if not found_checkbox:
9891001
return
990-
driver.execute_script('document.querySelector("input").focus()')
9911002
except Exception:
9921003
try:
9931004
driver.switch_to.default_content()

seleniumbase/fixtures/base_case.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3418,6 +3418,8 @@ def get_gui_element_rect(self, selector, by="css selector"):
34183418
viewport_height = self.execute_script("return window.innerHeight;")
34193419
x = math.ceil(window_rect["x"] + i_x + element_rect["x"])
34203420
y = math.ceil(w_bottom_y - viewport_height + i_y + element_rect["y"])
3421+
y_scroll_offset = self.execute_script("return window.pageYOffset;")
3422+
y = int(y - y_scroll_offset)
34213423
if iframe_switch:
34223424
self.switch_to_frame()
34233425
if not self.is_element_present(selector, by=by):

setup.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@
194194
'pluggy==1.5.0;python_version>="3.8"',
195195
"py==1.11.0", # Needed by pytest-html
196196
'pytest==7.4.4;python_version<"3.8"',
197-
'pytest==8.2.1;python_version>="3.8"',
197+
'pytest==8.3.1;python_version>="3.8"',
198198
"pytest-html==2.0.1", # Newer ones had issues
199199
'pytest-metadata==3.0.0;python_version<"3.8"',
200200
'pytest-metadata==3.1.1;python_version>="3.8"',
@@ -262,7 +262,7 @@
262262
'pdfminer.six==20221105;python_version<"3.8"',
263263
'pdfminer.six==20240706;python_version>="3.8"',
264264
'cryptography==39.0.2;python_version<"3.9"',
265-
'cryptography==42.0.8;python_version>="3.9"',
265+
'cryptography==43.0.0;python_version>="3.9"',
266266
'cffi==1.15.1;python_version<"3.8"',
267267
'cffi==1.16.0;python_version>="3.8"',
268268
"pycparser==2.22",
@@ -300,6 +300,7 @@
300300
# pip install -e .[selenium-wire]
301301
"selenium-wire": [
302302
'selenium-wire==5.1.0',
303+
'pyOpenSSL==24.2.1',
303304
'Brotli==1.1.0',
304305
'blinker==1.7.0', # Newer ones had issues
305306
'h2==4.1.0',

0 commit comments

Comments
 (0)