Vídeo recomendado
https://youtu.be/diWPPPhW-9E

IE Controls - Botão só habilita quando seleciona item numa lista

A Web está aí, não há como negar. Ela é onipresente em praticamente toda operação eletrônica realizada nos dias de hoje. Como não podia ser diferente, o Excel, ferramenta máxima para analistas e profissionais das mais diversas áreas do mercado precisa estar alinhado com esta necesssidade. E ele está! Neste forum, o debate é focado em expor dúvidas, sugestões, modelos de código e exemplos de uso do Excel na Integração com tecnologias Web.
jorrobeh
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Ter Abr 23, 2019 9:05 pm

IE Controls - Botão só habilita quando seleciona item numa lista

Mensagem por jorrobeh »

Boa noite amigos,
Sou novo no fórum, mas pesquisei antes de criar esse tópico e não achei nada a respeito.
Preciso automatizar uma rotina para marcar uma venda como entregue em um e-shop, porém para concluir a ação, preciso clicar em um botão 'Enviar' que só é habilitado depois que seleciono um item na lista, que no caso, é o item 'Pedido entregue'.
Quando faço isso manualmente, funciona certinho. Mas fazendo scraping via IE Controls, o botão não habilita depois que seleciono o item com:

.Document.all("situacao_id").SelectedIndex = 4

Em anexo está o código da página com o select e o botão que preciso usar.
Agradeço a ajuda!

Código: Selecionar todos

      <div class="box-content">
        <div class="row">
          <div class="col-md-9 col-sm-8">
            <div class="custom-box">
              <form id="frm-alterar-situacao" class="form-inline form-default" method="post" action="//app.lojaintegrada.com.br/painel/pedido/1630/alterar_situacao">
                <input id="situacao-mensagem" name="mensagem" value="" type="hidden">
                <div class="form-group">
                  <label class="control-label" for="situacao_id">Situação do pedido:</label>
                  <select id="situacao_id" class="form-control" name="situacao_id">
                    
                      <option style="background-color: rgb(199, 227, 255);" value="8" data-notificar="True">Pedido Cancelado</option>
                    
                      <option style="background-color: rgb(199, 227, 255);" value="9" data-notificar="False">Pedido Efetuado</option>
                    
                      <option style="background-color: rgb(199, 227, 255);" value="14" data-notificar="True">Pedido Entregue</option>
                    
                      <option style="background-color: rgb(199, 227, 255);" value="11" data-notificar="True">Pedido Enviado</option>
                    
                      <option style="background-color: rgb(199, 227, 255);" selected="selected" value="4" data-notificar="True">Pedido Pago</option>
                    
                      <option style="background-color: rgb(216, 236, 255);" value="17" data-notificar="True">Em produção</option>
                    
                      <option style="background-color: rgb(216, 236, 255);" value="15" data-notificar="True">Pedido em separação</option>
                    
                      <option style="background-color: rgb(216, 236, 255);" value="13" data-notificar="True">Pedido pronto para retirada</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="2" data-notificar="True">Aguardando pagamento</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="7" data-notificar="True">Pagamento devolvido</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="3" data-notificar="True">Pagamento em análise</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="16" data-notificar="False">Pagamento em chargeback</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="6" data-notificar="False">Pagamento em disputa</option>
                    
                  </select>

                    <!-- Split button -->
                    <div class="btn-group">
                      <button class="btn btn-danger btn-alterar-sem-observacao" disabled="disabled" onclick="$('#frm-alterar-situacao').submit();" type="button">Alterar</button>
                      <button aria-haspopup="true" aria-expanded="false" class="btn btn-danger dropdown-toggle" disabled="disabled" type="button" data-toggle="dropdown">
                        <span style="margin: 8px 0px;" class="caret"></span>
                        <span class="sr-only">Opções</span>
                      </button>
                      <ul class="dropdown-menu">
                        <li class="alterar-sem-observacao"><a href="javascript:;">Alterar status</a></li>
                        <li class="alterar-com-observacao"><a href="javascript:;">Alterar e enviar comentário para cliente por e-mail</a></li>
                      </ul>
                    </div>

                </div>

              </form>
              
            </div>
          </div>


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


jorrobeh
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Ter Abr 23, 2019 9:05 pm

Re: IE Controls - Botão só habilita quando seleciona item numa lista

Mensagem por jorrobeh »

Olá pessoal.
Eu imaginei que minha dúvida seria muito especifica para conseguir um retorno rápido, então continuei pesquisando pela web, atrás de alguma solução.
Bom, por sorte ou persistência, acabei encontrando a solução num fórum gringo.
Pelo que entendi (me corrijam se eu estiver errado), a lista e o botão funcionam em cadeia, ou seja, conforme eu seleciono o item na lista, habilita o botão. E eu não estava conseguindo selecionar o item na lista via InternetControls, porque não se trata de um listbox comum, e sim de um dropdown, que envolve linguagem java para efetivar o select.

Vou deixar a solução aqui, caso alguém mais tenha essa necessidade e assim como eu, não tenha outra opção, se não o InternetControls.

Código da solução abaixo:

Código: Selecionar todos

    Dim HTMLdoc As HTMLDocument
    Dim selectElement As HTMLSelectElement
    Dim evtChange As Object
    
            Set HTMLdoc = IE.Document
            Set evtChange = HTMLdoc.createEvent("HTMLEvents")
            evtChange.initEvent "change", True, False
            Set selectElement = HTMLdoc.getElementById("situacao_id")	'dentro do parenteses vai o 'select id'
            selectElement.Value = "14" 'Pedido Entregue 			'value é o item desejado na lista
            selectElement.dispatchEvent evtChange
      .Document.GetElementsByClassName("btn-alterar-sem-observacao")(0).Click	'click do botão já habilitado
Não esqueçam de referenciar a biblioteca 'Microsoft HTML Object Library'

Espero ter ajudado de alguma forma.
Grande abraço!


Responder