a
    /eT                     @   s\   d dl mZ d dlmZ d dlZG dd dejjjj	Z	G dd de	Z
dedd	d
ZdS )    )List)ByNc                       s8   e Zd Z fddZdeejjjj	 dddZ
  ZS )	
WebElementc                    s   t    | jd d S )Ng?)superclick_parent	reconnectself	__class__ ]/var/www/html/efn/efnconsultor/selenium/selenium-4.34.2/undetected_chromedriver/webelement.py
click_safe   s    
zWebElement.click_safeNF)returnc                 C   s<   d}|r|d|   7 }|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scriptr   r   r   children   s    zWebElement.children)NF)__name__
__module____qualname__r   r   selenium	webdriverremote
webelementr   r   __classcell__r   r   r   r   r      s
    r   c                       s4   e Zd ZdZ fddZedd Zdd Z  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                    s   t  || d | _d S )N)r   __init___attrs)r
   parentid_r   r   r   r"   (   s    zUCWebElement.__init__c                 C   s   | 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	   r   r   r   attrs,   s    zUCWebElement.attrsc                 C   s@   d dd | j D }|r&d| }| jj d| j | dS )N c                 S   s    g | ]\}}| d | dqS )z=""r   ).0kvr   r   r   
<listcomp>=       z)UCWebElement.__repr__.<locals>.<listcomp>z <>)joinr&   itemsr   r   tag_name)r
   Zstrattrsr   r   r   __repr__<   s    zUCWebElement.__repr__)	r   r   r   __doc__r"   propertyr&   r2   r    r   r   r   r   r!      s
   
r!   )r   c                 C   sP   |pt  }|  D ]8} |r0| j|kr:||  n
||  |t| ||O }q|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   r1   addr   )elementr   Z_resultsresultsr   r   r   r   C   s    


r   )NN)typingr   selenium.webdriver.common.byr   $selenium.webdriver.remote.webelementr   r   r   r   r   r!   strr   r   r   r   r   <module>   s
   (