
    gT                         d dl mZ d dlmZ d dlZ G d dej        j        j        j	                  Z	 G d de	          Z
d
defd	ZdS )    )List)ByNc                   b     e Zd Z fdZ	 ddeej        j        j        j	                 fdZ
 xZS )
WebElementc                 |    t                                                       | j                            d           d S )Ng?)superclick_parent	reconnect)self	__class__s    n/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/undetected_chromedriver/webelement.py
click_safezWebElement.click_safe   s0    s#####    NFreturnc                     d}|r|d|                                 z  z  }|rt          t          | |                    S t          | j                            ||                     S )z
        returns direct child elements of current element
        :param tag: str,  if supplied, returns <tag> nodes only
        z"return [... arguments[0].children]z'.filter( node => node.tagName === '%s'))upperlist_recursive_childrenr
   execute_script)r   tag	recursivescripts       r   childrenzWebElement.children   sk     6 	N?#))++MMF 	8+D#66777DL//==>>>r   )NF)__name__
__module____qualname__r   r   selenium	webdriverremote
webelementr   r   __classcell__r   s   @r   r   r      so        $ $ $ $ $
 #(? ?	h '2=	>? ? ? ? ? ? ? ?r   r   c                   >     e Zd ZdZ fdZed             Zd Z xZS )UCWebElementa  
    Custom WebElement class which makes it easier to view elements when
    working in an interactive environment.

    standard webelement repr:
    <selenium.webdriver.remote.webelement.WebElement (session="85ff0f671512fa535630e71ee951b1f2", element="6357cb55-92c3-4c0f-9416-b174f9c1b8c4")>

    using this WebElement class:
    <WebElement(<a class="mobile-show-inline-block mc-update-infos init-ok" href="#" id="main-cat-switcher-mobile">)>

    c                 Z    t                                          ||           d | _        d S )N)r   __init___attrs)r   parentid_r   s      r   r'   zUCWebElement.__init__(   s(    %%%r   c                 ^    | j         s | j                            d|           | _         | j         S )Na,  
                var items = {}; 
                for (index = 0; index < arguments[0].attributes.length; ++index) 
                {
                 items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value 
                }; 
                return items;
                )r(   r
   r   )r   s    r   attrszUCWebElement.attrs,   s9    { 	,55 
 
DK {r   c                     d                     d | j                                        D                       }|rd|z   }| j        j         d| j         | dS )N c                 $    g | ]\  }}| d | dS )z="" ).0kvs      r   
<listcomp>z)UCWebElement.__repr__.<locals>.<listcomp>=   s(    IIIda\\Q\\\IIIr   z <>)joinr,   itemsr   r   tag_name)r   strattrss     r   __repr__zUCWebElement.__repr__<   sd    88IIdj6F6F6H6HIIIJJ 	&X~H.)GGT]GHGGGGr   )	r   r   r   __doc__r'   propertyr,   r;   r"   r#   s   @r   r%   r%      ss        
 
       XH H H H H H Hr   r%   r   c                     |pt                      }|                                 D ]N} |r!| j        |k    r|                    |            n|                    |            |t	          | ||          z  }O|S )a  
    returns all children of <element> recursively

    :param element: `WebElement` object.
            find children below this <element>

    :param tag: str = None.
            if provided, return only <tag> elements. example: 'a', or 'img'
    :param _results: do not use!
    )setr   r9   addr   )elementr   _resultsresultss       r   r   r   C   s     #%%G##%% > > 	!3&&G$$$KK   &wW===Nr   )NN)typingr   selenium.webdriver.common.byr   $selenium.webdriver.remote.webelementr   r   r    r!   r   r%   strr   r1   r   r   <module>rH      s          + + + + + + + + + +? ? ? ? ?#*5@ ? ? ?(%H %H %H %H %H: %H %H %HP c      r   