![]() |
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! ![]() 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 |