Python Forum
Selenium on Angular page - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Web Scraping & Web Development (https://python-forum.io/forum-13.html)
+--- Thread: Selenium on Angular page (/thread-28565.html)



Selenium on Angular page - Martinelli - Jul-24-2020

Hi, everybody!

I am doing a bot to automate some activities from a web system.

I need to find and click on some elements inside an Angular page. I tried it in many ways, but I just can't do it. For example by each line:

navegador.find_element_by_xpath("//span[text()='Intimações']")
navegador.find_element_by_xpath(
          "//div[@class='item-inner']//span[@class='title' and contains(., 'Intimações')]").click()
navegador.find_element_by_xpath(
        "/html/body/div[1]/div[4]/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div[1]/h2").click()
navegador.find_element_by_link_text("Intimações").click()
navegador.find_element_by_css_selector(
        ".main-navigation-menu > li:nth-child(2) > a:nth-child(1)").click()
navegador.find_element_by_xpath(
        "//form[@class='ng-class']/a/div/div[2]/span").click()
navegador.find_element_by_xpath(
        "//li[contains(@class, 'ng-class')]/a/div/div[2]/span").click()
clicar = ActionChains.move_to_element(
        '/html/body/div[1]/div[3]/div/nav/ul/li[2]/a/div/div[2]/span')
        clicar.perform()


I will paste all the Angular code page above. I put bold and red color to bounce the part of the code that I need to find.

The exaclty code that I need is:

<li ng-class="{'active open': menu === 'intimacoes'}"> <a href="#/publicacoes">
<div class="item-content">
<div class="item-media"> <i class="ti-announcement" style="width: 9px"></i> </div>
<div class="item-inner"> <span class="title">Intimações</span> </div>
</div>
</a> </li>




<!DOCTYPE html>
<html lang="en">
<!--<![endif]-->
<!-- start: HEAD -->

<head>
<title>Publicações Online</title>
<!--[if IE]>
<meta http-equiv='X-UA-Compatible' content="IE=edge,IE=11,IE=9,IE=8,chrome=1" />
<![endif]-->
<meta charset="utf-8">
<link rel="shortcut icon" href="images/yeoman.png">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,minimum-scale=1,maximum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="manifest" href="assets/images/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="assets/images/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<link
href="https://fonts.googleapis.com/css?family=Lato:100,300,400,400italic,600,700|Raleway:100,300,400,500,600,700|Crete+Round:400italic"
rel="stylesheet" type="text/css">
<link rel="stylesheet" href="assets/css/theme.bundle.min.css">
<link rel="stylesheet" href="assets/css/vendors.bundle.css">
<link rel="stylesheet" href="assets/css/plugins.css">
<link rel="stylesheet" href="assets/css/styles.css">
<link rel="stylesheet" href="assets/css/toaster.css">
<link rel="stylesheet" href="assets/css/cartao_custom.css">
<link rel="stylesheet" href="assets/css/glyphicons_pro/glyphicons.min.css">
<link rel="stylesheet" href="assets/css/icomoon/style.min.css">
<link rel="stylesheet" href="assets/css/themes/theme-1.css" id="skin_color">
<!--<link rel="stylesheet" href="assets/js/ui-bootstrap/dist/ui-bootstrap-2.5.4-csp.css">-->
<link rel="stylesheet" href="vendor/angularjs-datetime-picker/angularjs-datetime-picker.css">
<link href="vendor/sweetalert/dist/sweetalert.css" rel="stylesheet" media="screen">
<link href="vendor/toastr/toastr.min.css" rel="stylesheet" media="screen">
<link href="assets/css/angular-sidebarjs.css" rel="stylesheet" media="screen">
<link rel="stylesheet" href="assets/js/multiple-select/multiple-select.css">
</head> <!-- end: HEAD -->

<body ng-app="pol-site-2019" ui-tour="siteTour" style="background:#ffffff">
<div class="loading" ng-if="loading">Loading…</div>
<div id="app">
<div ng-show="!menu" style="position: absolute;width: 100%;height: 100%;background-color: white;z-index:99999999">
</div>
<toaster-container toaster-options="{'time-out': 4000,'close-button': true}"></toaster-container> <!-- sidebar -->
<div ng-show="menu !== 'login' && menu && !suspenso" class="sidebar app-aside" id="sidebar">
<div class="sidebar-container perfect-scrollbar">
<nav>
<ul class="main-navigation-menu" style="margin:0">
<li ng-class="{'active open': menu == 'inicio'}"> <a href="#/dashboard">
<div class="item-content">
<div class="item-media"> <i class="ti-home" style="width: 9px"></i> </div>
<div class="item-inner"> <span class="title">Início</span> </div>
</div>
</a> </li>
<!-- <li ng-class="{'active open': menu == 'exportacaoBradesco'}">
<a href="#/exportacaoBradesco">
<div class="item-content">
<div class="item-media">
<i class="fa fa-list-alt" style="width: 9px;"></i>
</div>
<div class="item-inner">
<span class="title">Bradesco</span>
</div>
</div>
</a>
</li>-->
<li ng-class="{'active open': menu === 'intimacoes'}"> <a href="#/publicacoes">
<div class="item-content">
<div class="item-media"> <i class="ti-announcement" style="width: 9px"></i> </div>
<div class="item-inner"> <span class="title">Intimações</span> </div>
</div>
</a> </li>

<li ng-class="{'active open': menu === 'movimentacoes'}"> <a href="#/movimentacoes">
<div class="item-content">
<div class="item-media"> <i class="ti-reload" style="width: 9px"></i> </div>
<div class="item-inner"> <span class="title">Movimentações</span> </div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'relatorio'}"> <a href="#/relatorio">
<div class="item-content">
<div class="item-media"> <i style="font-size: 22px;margin-right: -5px;margin-left: -3px"
class="imoon imoon-paste"></i> </div>
<div class="item-inner"> <span class="title">Relátorios</span> </div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'agenda'}"> <a href="#/agenda">
<div class="item-content">
<div class="item-media"> <i class="glyphicons glyphicons-calendar"></i> </div>
<div class="item-inner"> <span class="title">Agenda</span> </div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'processos'}"> <a href="#/processos">
<div class="item-content">
<div class="item-media"> <i class="ti-file" style="width: 9px"></i> </div>
<div class="item-inner"> <span class="title">Processos</span> </div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'clientes'}"> <a href="#/clientes">
<div class="item-content">
<div class="item-media"> <i class="glyphicons glyphicons-group"></i> </div>
<div class="item-inner"> <span class="title">Clientes</span> </div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'distribuicao'}"> <a href="#/distribuicao">
<div class="item-content">
<div class="item-media"> <i class="ti-stamp" style="width: 9px"></i> </div>
<div class="item-inner"> <span class="title">Distribuição</span> </div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'higienizacao'}"> <a href="#/higienizacao">
<div class="item-content">
<div class="item-media"> <i class="ti-check" style="width: 9px"></i> </div>
<div class="item-inner"> <span class="title">Enriquecimento de base</span> </div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'jurisprudencia'}"> <a href="#/jurisprudencia">
<div class="item-content">
<div class="item-media"> <i class="fa fa-gavel"></i> </div>
<div class="item-inner"> <span class="title">Jurisprudência</span> </div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'calculos'}"> <a href="#/calculos">
<div class="item-content">
<div class="item-media"> <i class="glyphicons glyphicons-calculator"></i> </div>
<div class="item-inner"> <span class="title">Cálculos</span> </div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'apoioForense'}"> <a href="https://apoioforense.com.br/site/painel"
target="_blank">
<div class="item-content">
<div class="item-media"> <i class="glyphicons glyphicons-book"></i> </div>
<div class="item-inner"> <span class="title">Apoio Forense</span> </div>
</div>
</a> </li>
<li ng-if="admin" ng-class="{'active open': menu === 'comparador'}"> <a href="#/comparador">
<div class="item-content">
<div class="item-media"><i class="ti-eye" style="width: 9px"></i></div>
<div class="item-inner"><span class="title">Comparador de arquivos</span></div>
</div>
</a> </li>
<li ng-class="{'active open': menu === 'gestorPol'}"> <a
href="https://sistema.gestorpol.com.br/cadastro.aspx?planos" target="_blank">
<div class="item-content">
<div class="item-media"> <i class="fa fa-google"></i> </div>
<div class="item-inner"> <span class="title">Gestor Pol</span> </div>
</div>
</a> </li>
<!--<li ng-class="{'active open': menu === 'sair'}">
<a href="#/logout">
<div class="item-content">
<div class="item-media">
<i class="imoon imoon-exit"></i>
</div>
<div class="item-inner" >
<span class="title">Sair</span>
</div>
</div>
</a>
</li>-->
</ul> <!-- end: MAIN NAVIGATION MENU -->
</nav>
</div>
</div> <!-- / sidebar -->
<div class="app-content">
<div class="main-content">
<div ng-include src="'views/top-navbar.html'"></div>
<div id="container" ng-view=""></div>
</div>
</div>
</div>
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="vendor/jquery-ui/jquery-ui.min.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-base64/angular-base64.js"></script>
<script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
<script src="bower_components/bootstrap/js/tooltip.js"></script>
<script src="bower_components/angular-animate/angular-animate.js"></script>
<script src="bower_components/angular-cookies/angular-cookies.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/ngstorage/ngStorage.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
<script src="bower_components/angular-touch/angular-touch.js"></script>
<script src="bower_components/angular-file-saver/dist/angular-file-saver.js"></script>
<script src="bower_components/ng-dialog/js/ngDialog.js"></script>
<script src="bower_components/AngularJS-Toaster/toaster.js"></script>
<script src="assets/js/vendors.bundle.min.js"></script>
<script src="vendor/jquery.sparkline/jquery.sparkline.min.js"></script>
<script src="assets/js/main.js"></script>
<script src="vendor/angular-sidebarjs.js"></script>
<script src="bower_components/blob-polyfill/Blob.js"></script>
<script src="bower_components/file-saver.js/FileSaver.js"></script>
<script src="bower_components/angular-file-saver/dist/angular-file-saver.bundle.js"></script>
<script src="bower_components/moment/moment.js"></script>
<script src="vendor/sweetalert/dist/sweetalert.min.js"></script>
<script src="vendor/toastr/toastr.min.js"></script>
<script src="assets/js/ui-notifications.min.js"></script>
<script src="bower_components/angular-i18n/angular-locale_pt-br.js"></script>
<script src="bower_components/angular-modal-service/dst/angular-modal-service.min.js"></script>
<script src="bower_components/angular-file-model/angular-file-model.js"></script>
<script src="assets/js/jquery.maskedinput.js"></script>
<script src="assets/js/jspdf/dist/jspdf.min.js"></script> <!-- ui-bootstrap -->
<!--<script src="assets/js/ui-bootstrap/ui-bootstrap-2.5.4.js"></script>-->
<!--<script src="assets/js/ui-bootstrap/dist/ui-bootstrap-tpls-2.5.4.js"></script>-->
<script src="assets/js/multiple-select/multiple-select.js"></script>
<!--Angular UI Tour-->
<script src="bower_components/cfp-angular-hotkeys/build/hotkeys.js"></script>
<script src="bower_components/hone/hone.js"></script>
<script src="bower_components/tether/dist/js/tether.js"></script>
<script src="bower_components/angular-scroll/angular-scroll.js"></script>
<script src="bower_components/angular-bind-html-compile/angular-bind-html-compile.js"></script>
<script src="bower_components/angular-ui-tour/dist/angular-ui-tour.js"></script> <!-- END OF Angular UI Tour-->
<script src="scripts/config.6c0a5615.js"></script>
<script src="scripts/app.951a7541.js"></script>
<script src="scripts/requestConfig.b28c73c8.js"></script>
<script src="scripts/routes.864df476.js"></script>
<script src="scripts/runConfig.23d6cc65.js"></script>
<script src="scripts/factory/AuthService.03a4f6a1.js"></script>
<script src="scripts/factory/SwalEditService.35b6816d.js"></script>
<script src="scripts/factory/UtilHtmlInjector.e3f48e70.js"></script>
<script src="scripts/factory/AuthInterceptor.3920be03.js"></script>
<script src="scripts/factory/formataData.83e137aa.js"></script>
<script src="scripts/factory/formataValor.328849dc.js"></script>
<script src="scripts/factory/formataHora.5daec01e.js"></script>
<script src="scripts/factory/formataCPF.cf8531c7.js"></script>
<script src="scripts/factory/formataCelular.ba927e10.js"></script>
<script src="scripts/factory/formataCNPJ.792a8ad0.js"></script>
<script src="scripts/factory/formataEmail.d84e078a.js"></script>
<script src="scripts/factory/numeroCartaoCredito.3661b74d.js"></script>
<script src="scripts/factory/validadeCartaoCredito.4e9031ee.js"></script>
<script src="scripts/factory/cvvCartaoCredito.dd01abf7.js"></script>
<script src="scripts/filters/filter.75ae668c.js"></script>
<script src="scripts/filters/truster.c407a37c.js"></script>
<script src="scripts/service/IndexService.4f4048e3.js"></script>
<script src="scripts/service/LoginService.c5ae777a.js"></script>
<script src="scripts/service/ProcessoService.6188d9cc.js"></script>
<script src="scripts/service/PublicacaoService.72306b87.js"></script>
<script src="scripts/service/exportacao/BradescoService.js"></script>
<script src="scripts/service/MovimentacaoService.52c44597.js"></script>
<script src="scripts/service/ClienteService.779a88ea.js"></script>
<script src="scripts/service/AgendaService.3e7c318e.js"></script>
<script src="scripts/service/JurisprudenciaService.139ce5df.js"></script>
<script src="scripts/service/HigienizacaoService.1c3f825b.js"></script>
<script src="scripts/service/CalculosService.408e38af.js"></script>
<script src="scripts/service/AplicativosService.879af630.js"></script>
<script src="scripts/service/AssistenciaService.b12afc5e.js"></script>
<script src="scripts/service/DistribuicaoService.8fa4034a.js"></script>
<script src="scripts/service/ConfiguracaoService.45d3440f.js"></script>
<script src="scripts/service/MinhaContaService.6a10c888.js"></script>
<script src="scripts/service/MensagensSistemaService.503b70af.js"></script>
<script src="scripts/service/RelatoriosService.65cf12e7.js"></script>
<script src="scripts/service/TourFactory.5dd5c7dd.js"></script>
<script src="scripts/service/ContratacaoService.47a27c11.js"></script>
<script src="scripts/service/ImportadorProcessosService.fe8aa2c1.js"></script>
<script src="scripts/service/GerenciarTribunaisAgrupadosService.eb0378e9.js"></script>
<script src="scripts/service/GoogleAgendaService.3be5fdd7.js"></script>
<script src="scripts/service/ServerPaginate.4eb6cd1c.js"></script>
<script src="scripts/service/ServerPaginateProcesso.649dbda6.js"></script>
<script src="scripts/service/ServerPaginateDistribuicao.fb7f2ba2.js"></script>
<script src="scripts/service/ServerPaginateClientes.0527e617.js"></script>
<script src="scripts/service/ServerAcoes.faf55a5d.js"></script>
<script src="scripts/service/ComparadorService.3deb18df.js"></script>
<script src="scripts/controllers/IndexController.d51c4ed9.js"></script>
<script src="scripts/controllers/SuspensaoController.adaca2c4.js"></script>
<script src="scripts/controllers/SugestaoController.9b322b9e.js"></script>
<script src="scripts/controllers/ErrorController.a53ae0c6.js"></script>
<script src="scripts/controllers/LoginController.ec1b2f05.js"></script>
<script src="scripts/controllers/LoginRedirectController.bd229f38.js"></script>
<script src="scripts/controllers/PublicacaoController.50cb5cea.js"></script>
<script src="scripts/controllers/exportacao/BradescoController.js"></script>
<script src="scripts/controllers/MovimentacaoController.7f66dbd1.js"></script>
<script src="scripts/controllers/DistribuicaoController.5b28a462.js"></script>
<script src="scripts/controllers/ProcessoController.6697eea3.js"></script>
<script src="scripts/controllers/ClienteController.7cf50887.js"></script>
<script src="scripts/controllers/AgendaController.98c38904.js"></script>
<script src="scripts/controllers/CalculosController.7a22f4c3.js"></script>
<script src="scripts/controllers/AplicativosController.f5e2b35d.js"></script>
<script src="scripts/controllers/HigienizacaoController.871fb2a0.js"></script>
<script src="scripts/controllers/JurisprudenciaController.5885b744.js"></script>
<script src="scripts/controllers/ConfiguracaoController.f3adc720.js"></script>
<script src="scripts/controllers/MinhaContaController.40a038ec.js"></script>
<script src="scripts/controllers/GoogleAgendaController.2a962676.js"></script>
<script src="scripts/controllers/ContratacaoController.1b67653c.js"></script>
<script src="scripts/controllers/RelatoriosController.8569ede6.js"></script>
<script src="scripts/controllers/LogoutRedirectController.de8e32af.js"></script>
<script src="scripts/controllers/ComparadorController.ed42d1b7.js"></script>
<script src="scripts/controllers/ImportadorProcessosController.3de20395.js"></script>
<script src="scripts/controllers/GerenciarTribunaisAgrupadosController.e00c22c8.js"></script>
<script src="scripts/controllers/modal/ModalContrateController.js"></script>
<script src="scripts/controllers/exportacao/modal/ModalTriagemController.js"></script>
<script src="scripts/controllers/modal/ModalNavegacaoPublicacaoController.js"></script>
<script src="scripts/controllers/modal/ModalNavegacaoMovimentacaoController.js"></script>
<script src="scripts/controllers/modal/ModalNavegacaoJurisprudenciaController.js"></script>
<script src="scripts/controllers/modal/ModalImpressaoPublicacaoController.js"></script>
<script src="scripts/controllers/modal/ModalEventoController.js"></script>
<script src="scripts/controllers/modal/ModalLinhaTempoController.js"></script>
<script src="scripts/controllers/modal/ModalInformacoes.js"></script>
<script src="scripts/controllers/modal/ModalProcessoController.js"></script>
<script src="scripts/controllers/modal/ModalAtivaMovimentacaoProcesso.js"></script>
<script src="scripts/controllers/modal/ModalResponsavelFinanceiroController.js"></script>
<script src="scripts/controllers/modal/ModalDistribuicao.js"></script>
<script src="scripts/controllers/modal/ModalCartaoCreditoController.js"></script>
<script src="scripts/controllers/modal/ModalContratoController.js"></script>
<script src="scripts/controllers/modal/ModalCadastroRapidoClienteController.js"></script>
<script src="scripts/controllers/modal/ModalFicheiroProcesso.js"></script>
<script src="scripts/controllers/modal/ModalAssociaClienteParte.js"></script>
<script src="scripts/controllers/modal/ModalAudiencia.js"></script>
<script src="scripts/controllers/modal/ModalMostraTodosMovimentos.js"></script>
<script src="scripts/controllers/modal/ModalMostraTodasIntimacoes.js"></script>
<script src="scripts/controllers/modal/ModalVisualizarIntimacao.js"></script>
<script src="scripts/controllers/modal/ModalSenhaProcessoEletronico.js"></script>
<script src="scripts/controllers/modal/ModalMensagensIniciais.js"></script>
<script src="scripts/controllers/modal/ModalInstrucaodeUsoController.js"></script>
<script src="scripts/controllers/modal/ModalInstrucaodeInstallController.js"></script>
<script src="scripts/controllers/modal/ModalComparadorDivergencias.js"></script>
<script src="scripts/controllers/modal/ModalAgrupadorTribunal.js"></script>
<script src="vendor/jquery-validation/dist/jquery.validate.min.js"></script> <!-- Chat do Movidesk -->
<script type="text/javascript">
var mdChatClient = "F001B7C98C354BA2AC82EFD5195C0748";
</script>
<script src="https://chat.movidesk.com/Scripts/chat-widget.min.js"></script> <!-- Chat do Movidesk fim -->
<!-- end: JAVASCRIPTS REQUIRED FOR THIS PAGE ONLY -->
<!-- partial:partials/script/_main_script.html -->
<!-- partial -->
<!-- start: JavaScript Event Handlers for this page -->
<!--<script src="assets/js/pages-calendar.js"></script>-->
<script>
jQuery(document).ready(function () {
setTimeout(function () {
Main.init();
UINotifications.init();
}, 100);

});
</script>
</body>

</html>

Thank you for any kind of help!

Regards,
Martinelli


RE: Selenium on Angular page - Martinelli - Jul-24-2020

Hi All

Is there any tutorial that I can read about Angular, Selenium and Python?

Please, help!

Regards,
Martinelli


RE: Selenium on Angular page - snippsat - Jul-24-2020

Quote:Is there any tutorial that I can read about Angular, Selenium and Python?
There should make no change if site run Angular,it's the same standard approach in Selenium find tag and click.
There some info in part-1, part-2.
If search forum there are many Threads about Selenium.

If i run with this part local.
<!-- local3.html -->
<span class="title">Bradesco</span>
</div>
</div>
</a>
</li>-->
<li ng-class="{'active open': menu === 'intimacoes'}"> <a href="https://python-forum.io">
    <div class="item-content">
      <div class="item-media"> <i class="ti-announcement" style="width: 9px"></i> </div>
      <div class="item-inner"> <span class="title">Intimações</span> </div>
    </div>
  </a> </li>
<li ng-class="{'active open': menu === 'movimentacoes'}"> <a href="#/movimentacoes">
    <div class="item-content">
      <div class="item-media"> <i class="ti-reload" style="width: 9px"></i> </div>
      <div class="item-inner"> <span class="title">Movimentações</span> </div>
    </div>
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
import time
from bs4 import BeautifulSoup

#--| Setup
options = Options()
#options.add_argument("--headless")
browser = webdriver.Chrome(executable_path=r'C:\cmder\bin\chromedriver.exe')
#--| Parse or automation
browser.get('file:///E:/div_code/scrape/local/local3.html')
tag = browser.find_elements_by_css_selector('body > li:nth-child(2)')
So it work i can find text and click() on link,changed href to this forum address to see that click on link work.
Test.
>>> tag
[<selenium.webdriver.remote.webelement.WebElement (session="f7f282fabefce88ec87140e0fe958b5e", element="843128f1-7279-4bc7-b8fe-b312a467e1db")>]
>>> tag[0].tag_name
'li'
>>> tag[0].text
'Intimações'
>>> 
>>> tag[0].click()
>>> # Change to https://python-forum.io/



RE: Selenium on Angular page - Martinelli - Jul-28-2020

Thanks, Snippsat! Dance

Just to register here. I found another way to solve problems like this one. I started the Selenium IDE from a plugin into my brownser. I simulated what I was trying to do and just looked the steps registered into Selenium IDE.

On Selenium IDE, get the xpath:position info and use it normally. It works so good. Look the image attached here.

[attachment=942]

Thanks again, dude, Snippsat!

Regards,
Gustavo Martinelli