Example #1
0
 def load(self):
     j = Jaime.getInstance()
     
     self.graph_parser.entry_point = 'http://www.dafiti.com.ar'
     
     #---------------------------------
     ax = RouteAxis()
     ax.comment='Entre a la home de dafiti'
     ax.max_crosses = 2
     ax.to_url = re.compile(re.escape(self.graph_parser.entry_point)+'.*')
     ax.retry_axis = ax.id
     ax_01 = ax.id
     
     she = SecuencedHumanEvent()
     
     he = MouseHumanEvent.moveMouseTo("a[href='/customer/account/login']")
     she.pushHumanEvent(he)                
     he = MouseHumanEvent.clickMouse()        
     she.pushHumanEvent(he)                        
     self.graph_parser.navigator.setAxis(ax,she)                        
Example #2
0
    def load(self):
        j = Jaime.getInstance()
        
        self.graph_parser.entry_point = 'http://csi.cloudmark.com/reset-request'
        
        #---------------------------------
        ax = RouteAxis()
        ax.comment='Entre a la pantalla del formulario'
        ax.max_crosses = 2
        ax.to_url = re.compile(re.escape(self.graph_parser.entry_point)+'.*')
        ax.retry_axis = ax.id
        form_ax = ax.id
        
        she = SecuencedHumanEvent()
        
        he = MouseHumanEvent.moveMouseTo("div[id='recaptcha_image']")
        she.pushHumanEvent(he)                
        he = HumanEvent.saveImageUnderMouse('recaptcha_image.jpeg')
        she.pushHumanEvent(he)          
        he = SystemExternEvent("/home/juanmr/projects/jaime/trunk/src/application/deathbycaptcha.py", [ 'recaptcha_image.jpeg'],                                                               'tr',['-d','\n'])
        she.pushHumanEvent(he)        
                
        #-----------------------------------
        she2 = SecuencedHumanEvent()
        she2.condition = lambda (x): x.returns_stack[len(x.returns_stack)-1] == ''        
        
        he = HumanEvent.loadLink(self.graph_parser.entry_point)
        she2.pushHumanEvent(he)                
        she.pushHumanEvent(she2)
        
        #         ---------------------------        
        
        she1 = SecuencedHumanEvent()
        she1.condition = lambda (x): x.returns_stack[len(x.returns_stack)-1] != '' 
        
        he = MouseHumanEvent.moveMouseTo("input[id='recaptcha_response_field']")
        she1.pushHumanEvent(he)        
        
        he = MouseHumanEvent.clickMouse()        
        she1.pushHumanEvent(he)                        
        
        he = KeyboardHumanEvent.writePushedText()        
        she1.pushHumanEvent(he)        

        he = MouseHumanEvent.moveMouseTo("input[id='reset_title']")
        she1.pushHumanEvent(he)        
        he = MouseHumanEvent.clickMouse()        
        she1.pushHumanEvent(he)                        
        he = KeyboardHumanEvent.pressTabBackward()
        she1.pushHumanEvent(he)        

        she1.writeText(j.getParam('username',''))        
        he = KeyboardHumanEvent.pressTabForward()        
        she1.pushHumanEvent(he)        

        she1.writeText(j.getParam('title',''))        
        he = KeyboardHumanEvent.pressTabForward()        
        she1.pushHumanEvent(he)        

        she1.writeText(j.getParam('companyname',''))        
        he = KeyboardHumanEvent.pressTabForward()        
        she1.pushHumanEvent(he)        
        
        she1.writeText(j.getParam('emailaddress',''))
        he = KeyboardHumanEvent.pressTabForward()        
        she1.pushHumanEvent(he)        
        
        she1.writeText(j.getParam('phonenumber',''))
        he = KeyboardHumanEvent.pressTabForward()        
        she1.pushHumanEvent(he)                
        
        ip_parts = re.findall('[0-9]+',j.getParam('ipaddress',''))
        if not len(ip_parts):
            ip_parts = ['','','','']
        
        she1.writeText(ip_parts[0])             
        he = KeyboardHumanEvent.pressTabForward()       
        she1.pushHumanEvent(he)                

        she1.writeText(ip_parts[1])             
        he = KeyboardHumanEvent.pressTabForward()       
        she1.pushHumanEvent(he)                

        she1.writeText(ip_parts[2])             
        he = KeyboardHumanEvent.pressTabForward()       
        she1.pushHumanEvent(he)                

        she1.writeText(ip_parts[3])             
        he = KeyboardHumanEvent.pressTabForward()       
        she1.pushHumanEvent(he)                

        she1.writeText(j.getParam('domainname',''))             
        he = KeyboardHumanEvent.pressTabForward()       
        she1.pushHumanEvent(he)                
        
        
        she1.writeText(j.getParam('comments',''))
        
        he = MouseHumanEvent.moveMouseTo("input[id='submit']")
        she1.pushHumanEvent(he)                
        he = MouseHumanEvent.clickMouse()        
        she1.pushHumanEvent(he)                              
        
        she.pushHumanEvent(she1)
        #--------------------------------
        
        self.graph_parser.navigator.setAxis(ax,she)

# #        -------------------------------
# #        nodos de resultados posibles
        ax = RouteAxis()
        ax.comment='Resultado ok luego del submit'
        ax.to_url = re.compile(re.escape('http://csi.cloudmark.com/next.php')+'.*')
        ax.previous_axis.append([form_ax])
        ax.retry_axis = ax.id
        ax.max_crosses = 1
              
        she = SecuencedHumanEvent()
        self.graph_parser.navigator.setAxis(ax,she)
        self.graph_parser.navigator.collectData(ax.id,'printData',['posted ok form for ip %s' % j.getParam('ipaddress','')])
Example #3
0
    def load(self):
        j = Jaime.getInstance()

        self.graph_parser.entry_point = 'http://rbl.att.net/cgi-bin/rbl/block_admin.cgi'
        
        ax = RouteAxis()
        ax.comment='Entre a la pantalla del formulario'
        ax.max_crosses = 2
        ax.to_url = re.compile(re.escape('http://rbl.att.net/cgi-bin/rbl/block_admin.cgi'))
        ax.retry_axis = ax.id
        form_ax = ax.id
        
        she = SecuencedHumanEvent()
        
        he = MouseHumanEvent.moveMouseTo("div[id='recaptcha_image']")
        she.pushHumanEvent(he)                
        he = HumanEvent.saveImageUnderMouse('recaptcha_image_att.jpeg')
        she.pushHumanEvent(he)          
        he = SystemExternEvent("/home/juanmr/projects/jaime/trunk/src/application/deathbycaptcha.py", 
                               [ 'recaptcha_image_att.jpeg'],
                               'tr',
                               ['-d','\n'])
        she.pushHumanEvent(he)
        #         ---------------------------        
        she2 = SecuencedHumanEvent()
        she2.condition = lambda (x): x.returns_stack[len(x.returns_stack)-1] == ''        

        he = HumanEvent.loadLink(self.graph_parser.entry_point)
        she2.pushHumanEvent(he)                
        she.pushHumanEvent(she2)
        
        #         ---------------------------        
        she1 = SecuencedHumanEvent()
        she1.condition = lambda (x): x.returns_stack[len(x.returns_stack)-1] != '' 
        
        he = MouseHumanEvent.moveMouseTo("input[id='recaptcha_response_field']")
        she1.pushHumanEvent(he)        
        
        he = MouseHumanEvent.clickMouse()        
        she1.pushHumanEvent(he)                        
        
        he = KeyboardHumanEvent.writePushedText()        
        she1.pushHumanEvent(he)        

        he = MouseHumanEvent.moveMouseTo("input[name='user_name']")
        she1.pushHumanEvent(he)        
        he = MouseHumanEvent.clickMouse()        
        she1.pushHumanEvent(he)                        
        he = KeyboardHumanEvent.pressTabBackward()
        she1.pushHumanEvent(he)        
                
        she1.writeText(j.getParam('ipaddress',''))             
        he = KeyboardHumanEvent.pressTabForward()       
        she1.pushHumanEvent(he)                
        she1.writeText(j.getParam('username',''))        
        he = KeyboardHumanEvent.pressTabForward()        
        she1.pushHumanEvent(he)        
        she1.writeText(j.getParam('companyname',''))        
        he = KeyboardHumanEvent.pressTabForward()        
        she1.pushHumanEvent(he)        
        she1.writeText(j.getParam('emailaddress',''))
        he = KeyboardHumanEvent.pressTabForward()        
        she1.pushHumanEvent(he)        
        she1.writeText(j.getParam('phonenumber',''))
        he = KeyboardHumanEvent.pressTabForward()        
        she1.pushHumanEvent(he)                
        she1.writeText(j.getParam('comments',''))
        
        he = MouseHumanEvent.moveMouseTo("input[name='j5']")
        she1.pushHumanEvent(he)        
        he = MouseHumanEvent.clickMouse()        
        she1.pushHumanEvent(he)                        
        
        he = MouseHumanEvent.moveMouseTo("input[name='Submit']")
        she1.pushHumanEvent(he)                
        he = MouseHumanEvent.clickMouse()        
        she1.pushHumanEvent(he)                              
                
        she.pushHumanEvent(she1)
        #--------------------------------
        
        self.graph_parser.navigator.setAxis(ax,she)

#        -------------------------------
#        nodos de resultados posibles
        ax = RouteAxis()
        ax.comment='Resultado ok luego del submit'
        ax.to_url = re.compile(re.escape('http://rbl.att.net/block_thanks.html')+'.*')
        ax.previous_axis.append([form_ax])
        ax.retry_axis = ax.id
        ax.max_crosses = 1
              
        she = SecuencedHumanEvent()
        self.graph_parser.navigator.setAxis(ax,she)
        self.graph_parser.navigator.collectData(ax.id,'printData',['posted ok form for ip %s' % j.getParam('ipaddress','')])
        
#         ---------- este es en caso de error ------------
        ax = RouteAxis()
        ax.comment='Resultado con error  luego del submit'
        ax.to_url = re.compile(re.escape('http://rbl.att.net/cgi-bin/rbl/gdt.cgi')+'.*')
        ax.previous_axis.append([form_ax])
        ax.retry_axis = ax.id
        ax.max_crosses = 1
        
        she = SecuencedHumanEvent()
        self.graph_parser.navigator.setAxis(ax,she)
        self.graph_parser.navigator.collectData(ax.id,'printData',['error posting unblock for ip %s' % j.getParam('ipaddress','')])
Example #4
0
    def loadHumanEventsAol(self):        
#         completo el formulario de login
        ax = RouteAxis()
        ax.to_url = re.compile(re.escape('https://my.screenname.aol.com')+'.*')
        ax.from_url = ''
        she = SecuencedHumanEvent()
        she.writeText('*****@*****.**')
#         she.writeText('*****@*****.**')
        he = KeyboardHumanEvent.pressTabForward()
        she.pushHumanEvent(he)
        she.writeText('peteco')
#         she.writeText('Petec0')
        he = MouseHumanEvent.doHardClickMouse("input[id='submitID']")
        she.pushHumanEvent(he)        
        self.navigator.setAxis(ax,she)
        
#         si me dice que mi navegador es viejo voy a clasic mail
        ax = RouteAxis()
        ax.from_url = 'http://mail.aol.com/33490-311/aol-6/en-us/Suite.aspx'
        ax.to_url = 'http://phoenix.aol.com/main' 
        she = SecuencedHumanEvent()
        he = MouseHumanEvent.moveMouseTo("a[href$='switchToWebsuite']",'AOL Mail Classic')
        she.pushHumanEvent(he)
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)
        self.navigator.setAxis(ax,she)
        
#         voy a basic view
        ax = RouteAxis()
        ax.from_url = 'http://mail.aol.com/33490-311/aol-6/en-us/Suite.aspx'
        ax.to_url = 'http://mail.aol.com/33490-311/aol-6/en-us/Suite.aspx'
        she = SecuencedHumanEvent()
        he = MouseHumanEvent.moveMouseTo("a[href$='Today.aspx']",'Basic Version')
        she.pushHumanEvent(he)
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)
        self.navigator.setAxis(ax,she)
        
#         voy a spam
        ax = RouteAxis()
        ax.from_url = 'http://mail.aol.com/33490-311/aol-6/en-us/Suite.aspx'
        ax.to_url = 'http://mail.aol.com/33490-311/aol-6/en-us/Lite/Today.aspx'
        she = SecuencedHumanEvent()
        he = MouseHumanEvent.moveMouseTo('span','Spam')
        she.pushHumanEvent(he)
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)
        self.navigator.setAxis(ax,she)
        
#         clickeo el primer mail no leido
        ax = RouteAxis()
        ax.to_url = re.compile(re.escape('http://mail.aol.com/33490-311/aol-6/en-us/Lite/MsgList.aspx')+'.*')
        she = SecuencedHumanEvent()
        he = MouseHumanEvent.moveMouseTo("tr.row-unread td[id^='linkValue']")
        she.pushHumanEvent(he)
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)
        self.navigator.setAxis(ax,she)

        ax = RouteAxis()
        ax.from_url = 'http://mail.aol.com/33490-311/aol-6/en-us/Lite/MsgList.aspx'
        ax.to_url = re.compile(re.escape('http://mail.aol.com/33490-311/aol-6/en-us/Lite/MsgRead.aspx?folder=Spam') + '.*')
        ax.css_selector_condition = "div[class='removedImage'] a[class='wsLink']"
        she = SecuencedHumanEvent()
        he = MouseHumanEvent.moveMouseTo("a[class='wsLink']",'Show')
        she.pushHumanEvent(he)
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)
        self.navigator.setAxis(ax,she)
        
        ax = RouteAxis()
        ax.from_url = re.compile(re.escape('http://mail.aol.com/33490-311/aol-6/en-us/Lite/MsgRead.aspx?folder=Spam') + '.*')
        ax.to_url = re.compile(re.escape('http://mail.aol.com/33490-311/aol-6/en-us/Lite/MsgRead.aspx?folder=Spam') + '.*')
        she = SecuencedHumanEvent()
        he = MouseHumanEvent.moveMouseTo("input[value='Not Spam']")
        she.pushHumanEvent(he)
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)
        self.navigator.setAxis(ax,she)
        
# #         #hago que haga click en un mail
#         ax = RouteAxis()
#         ax.from_url = 'http://mail.aol.com/33490-311/aol-6/en-us/Suite.aspx'
#         ax.to_url = 'http://mail.aol.com/33490-311/aol-6/en-us/Suite.aspx'
#         ax.css_selector_condition = """div[class='navItemCurrent'] div[class='text'] span"""
#         she = SecuencedHumanEvent()
#         he = MouseHumanEvent.moveMouseTo('div[class="dojoxGrid-row]:not(.row-read)"')
#         she.pushHumanEvent(he)
#         self.navigator.setAxis(ax,she)
        
        self.view.load(QUrl('http://mail.aol.com'))
Example #5
0
    def load(self):
        j = Jaime.getInstance()
        
        self.graph_parser.entry_point = 'https://login.yahoo.com/config/login_verify2?&.src=ym'
        
        exit_ax = RouteAxis()
        exit_ax.comment='Accion que tomo para salir del robot'
        exit_ax.max_crosses = 2
        exit_ax.to_url = re.compile(re.escape('https://login.yahoo.com/login?logout=') + '.*')
        exit_ax.retry_axis = exit_ax.id
        
        she = SecuencedHumanEvent()
        he = MouseHumanEvent.moveMouseTo("li > a",re.compile('.*Sign Out.*'))
        she.pushHumanEvent(he)        
        he = MouseHumanEvent.clickMouse()        
        she.pushHumanEvent(he)        
        
        self.graph_parser.navigator.setAxis(exit_ax,she)
        # -----------------------------------------------        
        ax = RouteAxis()
        ax.to_url = 'https://login.yahoo.com/config/login_verify2?&.src=ym'
        ax.comment='Primer eje, es el que me hace cargar el login'
        ax.retry_axis = ax.id
        ax.max_crosses = 1
        ax_0_id =  ax.id
        

        she = SecuencedHumanEvent()        
        she.moveMouseTo("input[id='passwd']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)             
        he = KeyboardHumanEvent.pressTabBackward()
        she.pushHumanEvent(he)                
        he = KeyboardHumanEvent.pressBackspace()
        she.pushHumanEvent(he)                
        she.writeText(j.getParam('username',''))                
        he = KeyboardHumanEvent.pressTabForward()        
        she.pushHumanEvent(he)        
        she.writeText(j.getParam('password',''))        
        she.moveMouseTo("button[id='.save']")        
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)               
        
        self.graph_parser.navigator.setAxis(ax,she)        
        
        # -----------------------------------------------
        ax_1 = RouteAxis()
        ax_1_id = ax_1.id
        ax_2 = RouteAxis()
        ax_2_id = ax_2.id
        ax_3 = RouteAxis()
        ax_3_id = ax_3.id
        ax_4 = RouteAxis()
        ax_4_id = ax_4.id
        ax_5 = RouteAxis()
        ax_5_id = ax_5.id
        ax_6 = RouteAxis()
        ax_6_id = ax_6.id
        # ----------------------------------------------        
        ax_1.comment='Acabo de loguearme. Busco el recurso en el inbox'
        ax_1.to_url = re.compile(re.escape('http://us.') + '.*' + re.escape('.mail.yahoo.com/mc/welcome?') + '.*')
        ax_1.previous_axis.append([ax_0_id])
        
        she = SecuencedHumanEvent()
        she.moveMouseTo("input[id='mailsearchtop']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        self.graph_parser.navigator.setAxis(ax_1,she)
        self.graph_parser.navigator.collectData(ax_1_id,'printData',['User %s logged in' % j.getParam('username','')])
        #--------------------------------------------------------------
        ax_3.comment='Estoy viendo un resultado de busqueda sin resultados'        
        ax_3.previous_axis.append([ax_6_id])
        ax_3.previous_axis.append([ax_4_id])
        ax_3.max_crosses = 1 
        ax_3.css_selector_condition = "table[id='datatable'] a[href^='/mc/showMessage']"
        ax_3.not_css_selector = True 
        
        # me voy para la busqueda avanzada
        she = SecuencedHumanEvent()
        she.moveMouseTo("input[id='msqtop']")        
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)           
        he = KeyboardHumanEvent.pressTabForward()        
        she.pushHumanEvent(he)        
        he = KeyboardHumanEvent.pressTabBackward()
        she.pushHumanEvent(he)                
        he = KeyboardHumanEvent.pressBackspace()
        she.pushHumanEvent(he)                
        she.moveMouseTo("input[id='mailsearchtop']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        self.graph_parser.navigator.setAxis(ax_3,she)

        #--------------------------------------------------------------
        ax_2.comment='Estoy viendo un resultado de busqueda con resultados'        
        ax_2.previous_axis.append([ax_6_id])
        ax_2.previous_axis.append([ax_4_id])
        ax_2.css_selector_condition = "table[id='datatable'] a[href^='/mc/showMessage']"
                
        she = SecuencedHumanEvent()
        she.moveMouseTo("table[id='datatable'] a[href^='/mc/showMessage']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)           
        self.graph_parser.navigator.setAxis(ax_2,she)
        #--------------------------------------------------------------
        
        
        ax_4.comment='Estoy en el formulario de busqueda avanzada, busco en el spam'
        ax_4.to_url = re.compile(re.escape('http://us.') + '.*' + re.escape('.mail.yahoo.com/mc/welcome?') + '.*')
        ax_4.previous_axis.append([ax_3_id])
                
        she = SecuencedHumanEvent()
        she.moveMouseTo("input[name='from']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        she.writeText(j.getParam('resource',''))
        
        she.moveMouseTo("input[id='fol-0']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        

        she.moveMouseTo("input[id='fol-1']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        

        she.moveMouseTo("input[id='fol-2']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        she.moveMouseTo("input[id='global_check_mail_bottom']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        

        self.graph_parser.navigator.setAxis(ax_4,she)
        #--------------------------------------------------------------
        ax_5.comment='Estoy viendo un mail que encontre en el spam o el inbox'        
        ax_5.previous_axis.append([ax_2_id])        
        
        she = SecuencedHumanEvent()
        she.moveMouseTo("input[name='top_delete']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)           
        self.graph_parser.navigator.setAxis(ax_5,she)
        #--------------------------------------------------------------
        ax_6.comment='Entre a la busqueda avanzada para buscar en inbox'        
        ax_6.previous_axis.append([ax_1_id])        
                
        she = SecuencedHumanEvent()
        she.moveMouseTo("input[name='from']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        she.writeText(j.getParam('resource',''))
        
        she.moveMouseTo("input[id='fol-1']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        

        she.moveMouseTo("input[id='fol-2']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        

        she.moveMouseTo("input[id='fol-3']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        she.moveMouseTo("input[id='global_check_mail_bottom']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        he = SystemExternEvent("sleep", 
                               [ '15'])
        she.pushHumanEvent(he)        
        
        she.moveMouseTo("table[id='datatable'] a[href^='/mc/showMessage']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)           
                
        self.graph_parser.navigator.setAxis(ax_6,she)
    def load(self):
        j = Jaime.getInstance()
        
        self.graph_parser.entry_point = 'https://login.yahoo.com/config/login_verify2?&.src=ym'

        exit_ax = RouteAxis()
        exit_ax.comment='Accion que tomo para salir del robot'
        exit_ax.max_crosses = 2
        exit_ax.to_url = re.compile(re.escape('https://login.yahoo.com/login?logout=') + '.*')
        exit_ax.retry_axis = exit_ax.id
        
        she = SecuencedHumanEvent()
        he = MouseHumanEvent.moveMouseTo("li > a",re.compile('.*Sign Out.*'))
        she.pushHumanEvent(he)        
        he = MouseHumanEvent.clickMouse()        
        she.pushHumanEvent(he)        
        
        self.graph_parser.navigator.setAxis(exit_ax,she)
        # -----------------------------------------------        
        ax = RouteAxis()
        ax.to_url = 'https://login.yahoo.com/config/login_verify2?&.src=ym'
        ax.comment='Primer eje, es el que me hace cargar el login'
        ax.retry_axis = ax.id
        ax.max_crosses = 1
        ax.exit_point = exit_ax.id
        login_ax_id =  ax.id
        
        she = SecuencedHumanEvent()
        
        she.moveMouseTo("input[id='passwd']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)           
        
        he = KeyboardHumanEvent.pressTabBackward()
        she.pushHumanEvent(he)        
        
        he = KeyboardHumanEvent.pressBackspace()
        she.pushHumanEvent(he)        
        
        she.writeText(j.getParam('username',''))
        he = KeyboardHumanEvent.pressTabForward()
        
        she.pushHumanEvent(he)        
        she.writeText(j.getParam('password',''))
        she.moveMouseTo("button[id='.save']")        
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)               
        
        self.graph_parser.navigator.setAxis(ax,she)        
        
        # -----------------------------------------------
        ax = RouteAxis()
        ax.comment='Acabo de loguearme, estoy mi mail'
        ax.to_url = re.compile(re.escape('http://us.') + '.*' + re.escape('.mail.yahoo.com/mc/welcome?') + '.*')
        ax.previous_axis.append([login_ax_id])
        ax.max_crosses = 2
        ax.retry_axis = ax.id
        ax.exit_point = exit_ax.id
        ax_home_mail_id = ax.id
       
        she = SecuencedHumanEvent()
        she.moveMouseTo("li[id='bulk']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        self.graph_parser.navigator.setAxis(ax,she)
        self.graph_parser.navigator.collectData(ax.id,'printData',['User %s logged in' % j.getParam('username','')])
        self.graph_parser.navigator.collectData(ax.id,'spamCount',[])
        self.graph_parser.navigator.collectData(ax.id,'spamUnreadCount',[])
        self.graph_parser.navigator.collectData(ax.id,'inboxCount',[])
        self.graph_parser.navigator.collectData(ax.id,'inboxUnreadCount',[])
        
        # -----------------------------------------------        
        ax_bulk = RouteAxis()
        ax_bulk.comment='Entre al bulk ahora tengo que agarrar los mail no leidos, hago click en unread'
        ax_bulk.css_selector_condition = "li[id='bulk'][class~='selected']"
        ax_bulk.to_url = re.compile('.*welcome\?.*_pg=showFolder.*fid=.*Bulk')        
        ax_bulk.previous_axis.append([ax_home_mail_id])
        ax_bulk.retry_axis = ax_home_mail_id
        
        she = SecuencedHumanEvent()
        he = MouseHumanEvent.moveMouseTo("li > a",re.compile('\s*Unread\s*'))
        she.pushHumanEvent(he)        
        
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        self.graph_parser.navigator.setAxis(ax_bulk,she)
        # -----------------------------------------------
        #necesito crear este axis aca para tener el id
        click_mail_ax = RouteAxis() 
        
        ax_bulk_unread = RouteAxis()
        ax_bulk_unread.comment='Entre al bulk con unread seleccionado'
        ax_bulk_unread.css_selector_condition = "li[id='bulk'][class~='selected']"
        ax_bulk_unread.to_url = re.compile('.*welcome\?.*_pg=showFolder.*fid=.*Bulk')        
        ax_bulk_unread.max_crosses = 25
        ax_bulk_unread.retry_axis = ax_home_mail_id
        ax_bulk_unread.exit_point = exit_ax.id
        ax_bulk_unread.previous_axis.append([ax_bulk.id])
        ax_bulk_unread.previous_axis.append([click_mail_ax.id])
        
        
        she = SecuencedHumanEvent()
        she.moveMouseTo("tr[class='msgnew'] a[href^='showMessage']")
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        self.graph_parser.navigator.setAxis(ax_bulk_unread,she)

        # -----------------------------------------------                
        show_img_ax = RouteAxis()
        show_img_ax.previous_axis.append([ax_bulk_unread.id])
        show_img_ax.css_selector_condition = "b[id='message_view_showimg']"
        show_img_ax.comment='Entre a un mail no leido que no tiene las imagenes desplegadas, las desplego'
        show_img_ax.retry_axis = ax_home_mail_id
        
        
        she = SecuencedHumanEvent()        
        he = MouseHumanEvent.moveMouseTo("a",re.compile('.*Show\sImages.*'))
        she.pushHumanEvent(he)        
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        self.graph_parser.navigator.setAxis(show_img_ax,she)
        
        # -----------------------------------------------                
        click_mail_ax.previous_axis.append([ax_bulk_unread.id])
        click_mail_ax.previous_axis.append([show_img_ax.id])        
        click_mail_ax.css_selector_condition = "b[id='message_view_showimg']"
        click_mail_ax.not_css_selector = True
        click_mail_ax.comment='Entro a un mail que tiene las imagenes desplegadas, viniendo del nodo bulk o habiendo clickeado desplegar imagenes'
        click_mail_ax.retry_axis = ax_home_mail_id
        
        she = SecuencedHumanEvent()        
        he = MouseHumanEvent.moveMouseTo("a",None,None, {'href':re.compile('.*\/g\/c\?E=.*')})
        she.pushHumanEvent(he)        
        he = MouseHumanEvent.clickMouseNewTab()        
        she.pushHumanEvent(he)
        he = MouseHumanEvent.moveMouseTo("input[value='Not Spam']")
        she.pushHumanEvent(he)        
        he = MouseHumanEvent.clickMouse()
        she.pushHumanEvent(he)        
        
        self.graph_parser.navigator.setAxis(click_mail_ax,she)
        self.graph_parser.navigator.collectData(click_mail_ax.id,'getSubjectFromMail',[])
        self.graph_parser.navigator.collectData(click_mail_ax.id,'getFromDomainFromMail',[])
        self.graph_parser.navigator.collectData(click_mail_ax.id,'getLinksFromMail',[])
 def clickMouse(self,exp):
     he = MouseHumanEvent.clickMouse(exp)
     self.pushHumanEvent(he)
 def moveMouseTo(self,exp):
     he = MouseHumanEvent.moveMouseTo(exp)
     self.pushHumanEvent(he)