Skip to content

Commit 31ca95a

Browse files
authored
Merge pull request #52 from lf2a/fix-dimensions
Fix: _get_page_size: new method to get page size instead of using dimensions value
2 parents 56e7e32 + 9b89504 commit 31ca95a

File tree

1 file changed

+30
-14
lines changed

1 file changed

+30
-14
lines changed

botcity/web/bot.py

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
class WebBot(BaseBot):
4242
KEYS = Keys
43+
DEFAULT_DIMENSIONS = (1600, 900)
4344
"""
4445
Base class for Web Bots.
4546
Users must implement the `action` method in their classes.
@@ -72,7 +73,6 @@ def __init__(self, headless=False):
7273
# State for Key modifiers
7374
self._shift_hold = False
7475

75-
self._dimensions = (1600, 900)
7676
self._download_folder_path = os.getcwd()
7777

7878
@property
@@ -255,18 +255,18 @@ def set_screen_resolution(self, width=None, height=None):
255255
width (int): The desired width.
256256
height (int): The desired height.
257257
"""
258-
self._dimensions = (width or 1600, height or 900)
258+
dimensions = (width or self.DEFAULT_DIMENSIONS[0], height or self.DEFAULT_DIMENSIONS[1])
259259

260260
if self.headless:
261261
# When running headless the window size is the viewport size
262-
window_size = self._dimensions
262+
window_size = dimensions
263263
else:
264264
# When running non-headless we need to account for the borders and etc
265265
# So the size must be bigger to have the same viewport size as before
266266
window_size = self._driver.execute_script("""
267267
return [window.outerWidth - window.innerWidth + arguments[0],
268268
window.outerHeight - window.innerHeight + arguments[1]];
269-
""", *self._dimensions)
269+
""", *dimensions)
270270
self._driver.set_window_size(*window_size)
271271

272272
def _webdriver_command(self, command, params=None, req_type="POST"):
@@ -312,13 +312,14 @@ def get_screen_image(self, region=None):
312312
if not region:
313313
region = (0, 0, 0, 0)
314314

315-
x = region[0] or 0
316-
y = region[1] or 0
317-
width = region[2] or self._dimensions[0]
318-
height = region[3] or self._dimensions[1]
319315
data = self._driver.get_screenshot_as_base64()
320316
image_data = base64.b64decode(data)
321317
img = Image.open(io.BytesIO(image_data))
318+
319+
x = region[0]
320+
y = region[1]
321+
width = region[2] or self._get_page_size()[0]
322+
height = region[3] or self._get_page_size()[1]
322323
img = img.crop((x, y, x + width, y + height))
323324
return img
324325

@@ -335,6 +336,21 @@ def get_viewport_size(self):
335336
height = self._driver.get_window_size().get("height")
336337
return width, height
337338

339+
def _get_page_size(self):
340+
"""
341+
Returns the browser current page size.
342+
343+
Returns:
344+
width (int): The current page width.
345+
height (int): The current page height.
346+
"""
347+
if not self._driver:
348+
return self.DEFAULT_DIMENSIONS
349+
350+
width = self.execute_javascript("return window.innerWidth")
351+
height = self.execute_javascript("return window.innerHeight")
352+
return width, height
353+
338354
def add_image(self, label, path):
339355
"""
340356
Add an image into the state image map.
@@ -391,7 +407,7 @@ def find_multiple(self, labels, x=None, y=None, width=None, height=None, *,
391407
def _to_dict(lbs, elems):
392408
return {k: v for k, v in zip(lbs, elems)}
393409

394-
screen_w, screen_h = self._dimensions
410+
screen_w, screen_h = self._get_page_size()
395411
x = x or 0
396412
y = y or 0
397413
w = width or screen_w
@@ -492,7 +508,7 @@ def find_until(self, label, x=None, y=None, width=None, height=None, *,
492508
element (NamedTuple): The element coordinates. None if not found.
493509
"""
494510
self.state.element = None
495-
screen_w, screen_h = self._dimensions
511+
screen_w, screen_h = self._get_page_size()
496512
x = x or 0
497513
y = y or 0
498514
w = width or screen_w
@@ -595,7 +611,7 @@ def find_same(item, items):
595611
return elems
596612

597613
self.state.element = None
598-
screen_w, screen_h = self._dimensions
614+
screen_w, screen_h = self._get_page_size()
599615
x = x or 0
600616
y = y or 0
601617
w = width or screen_w
@@ -678,7 +694,7 @@ def display_size(self):
678694
Returns:
679695
size (Tuple): The screen dimension (width and height) in pixels.
680696
"""
681-
return self._dimensions
697+
return self._get_page_size()
682698

683699
def screenshot(self, filepath=None, region=None):
684700
"""
@@ -722,7 +738,7 @@ def screen_cut(self, x, y, width=None, height=None):
722738
Returns:
723739
Image: The screenshot Image object
724740
"""
725-
screen_size = self._dimensions
741+
screen_size = self._get_page_size()
726742
x = x or 0
727743
y = y or 0
728744
width = width or screen_size[0]
@@ -759,7 +775,7 @@ def get_element_coords(self, label, x=None, y=None, width=None, height=None, mat
759775
coords (Tuple): A tuple containing the x and y coordinates for the element.
760776
"""
761777
self.state.element = None
762-
screen_size = self._dimensions
778+
screen_size = self._get_page_size()
763779
x = x or 0
764780
y = y or 0
765781
width = width or screen_size[0]

0 commit comments

Comments
 (0)