The advanced_elements parameter enables an enhanced WebElement class that provides more readable and informative element representations, especially useful when working in interactive environments like Jupyter notebooks or Python REPL.
import undetected as ucdriver = uc.Chrome(advanced_elements=True)driver.get("https://example.com")# Find all linkslinks = driver.find_elements("tag name", "a")# Display in cell - each element shows its attributeslinks[:5]
import undetected as ucimport timedriver = uc.Chrome(advanced_elements=True)driver.get("https://example.com")# Find all elementsstart = time.time()elements = driver.find_elements("tag name", "*")print(f"Found {len(elements)} elements in {time.time() - start:.2f}s")# Print them (this triggers attribute fetching)start = time.time()for elem in elements[:100]: print(elem) # Fetches attributes for each elementprint(f"Printed 100 elements in {time.time() - start:.2f}s")
Only enable advanced_elements=True during development and debugging. For production scripts that don’t need readable output, use the default advanced_elements=False for better performance.
import undetected as ucdriver = uc.Chrome(advanced_elements=True)driver.get("https://example.com")# Find elements and immediately see what you gotbuttons = driver.find_elements("css selector", "button")for btn in buttons: print(btn) # See all button attributes at a glance
import undetected as ucdriver = uc.Chrome(advanced_elements=True)driver.get("https://example.com")# Verify the correct element is foundlogin_button = driver.find_element("id", "login")print(f"Found: {login_button}")# Immediately see if it matches expectations:# WebElement <button class="btn btn-primary" id="login" type="submit">
element = driver.find_element("id", "nav-menu")# Get all direct childrenall_children = element.children()# Get only <li> childrenlist_items = element.children(tag="li")# Get all descendants recursivelyall_descendants = element.children(recursive=True)
Implementation:
def children( self, tag=None, recursive=False) -> List[selenium.webdriver.remote.webelement.WebElement]: """Returns direct child elements of current element :param tag: str, if supplied, returns <tag> nodes only :param recursive: bool, if True, returns all descendants """ script = "return [... arguments[0].children]" if tag: script += ".filter( node => node.tagName === '%s')" % tag.upper() if recursive: return list(_recursive_children(self, tag)) return list(self._parent.execute_script(script, self))
import undetected as ucdef inspect_form(driver, form_selector): """Inspect all fields in a form""" form = driver.find_element("css selector", form_selector) print(f"Form: {form}\n") # Get all input fields inputs = form.children(tag="input") selects = form.children(tag="select") textareas = form.children(tag="textarea") print("Input fields:") for inp in inputs: print(f" {inp}") print("\nSelect fields:") for sel in selects: print(f" {sel}") # Get options for opt in sel.children(tag="option"): print(f" {opt}") print("\nTextarea fields:") for textarea in textareas: print(f" {textarea}")# Usagedriver = uc.Chrome(advanced_elements=True)driver.get("https://example.com/form")inspect_form(driver, "form#contact-form")driver.quit()