in modules/util.py [0:0]
def get_all_colors_in_element(self, selector: tuple) -> set:
"""
Given an element selector, return all the unique colors in that element.
"""
el = self.driver.find_element(*selector)
u = Utilities()
image_loc = f"{u.random_string(7)}.png"
self.driver.save_screenshot(image_loc)
# Get browser window size and scroll position
scroll_position = self.driver.execute_script(
"return { x: window.scrollX, y: window.scrollY };"
)
# Get device pixel ratio
device_pixel_ratio = self.driver.execute_script(
"return window.devicePixelRatio;"
)
# Get X and Y minima and maxima given view position and ratio
link_loc = el.location
link_size = el.size
x_start = int((link_loc["x"] - scroll_position["x"]) * device_pixel_ratio)
y_start = int((link_loc["y"] - scroll_position["y"]) * device_pixel_ratio)
x_end = x_start + int(link_size["width"] * device_pixel_ratio)
y_end = y_start + int(link_size["height"] * device_pixel_ratio)
# Get pixel color values for every pixel in the element, return the set
shot_image = Image.open(image_loc)
colors = []
logging.info(
f"Checking colors in x = ({x_start} : {x_end}), y = ({y_start} : {y_end})"
)
for x in range(x_start, x_end):
for y in range(y_start, y_end):
colors.append(shot_image.getpixel((x, y)))
remove(image_loc)
return set(colors)