Ir ao conteúdo

Posts recomendados

Postado

Pessoal, estou criando um app básico para empresa onde trabalho, mas estou com dificuldades de colocar os dados inseridos no app para o OneDrive mais especificamente no excel web, pois onde trabalho o SQL está restrito para uso de captação de dados desse tipo. Criei um código que de inicio deu certo, mas ainda não era o que eu queria, mas assim que inseri os campos para serem preenchido já não funcionava mais. A finalidade deste código seria para um apk em um celular ou tablet android para inserção de dados.

 

Campos com url, nome entre outros foram trocados por segurança.

 

 

Primeiro código que deu certo, mas o objetivo não estava finalizado.

from kivy.app import App

from kivy.uix.boxlayout import BoxLayout

from kivy.uix.label import Label

from kivy.uix.textinput import TextInput

from kivy.uix.button import Button

from kivy.uix.scrollview import ScrollView

from kivy.uix.gridlayout import GridLayout

from kivy.uix.popup import Popup

from kivy.uix.spinner import Spinner

from selenium import webdriver

from datetime import datetime, timedelta

import time



class BaseDadosApp(App):

    def build(self):

        root_layout = BoxLayout(orientation='vertical', padding=10, spacing=10)



        # Título centralizado

        titulo_label = Label(text="Aplicativo", font_size=18, color=[1, 1, 1, 1], size_hint_y=None, height=40)

        root_layout.add_widget(titulo_label)



        # ScrollView para rolar a interface

        scroll_view = ScrollView()

        root_layout.add_widget(scroll_view)



        # Layout para os campos de entrada

        campos_layout = GridLayout(cols=2, spacing=10, size_hint_y=None, row_force_default=True, row_default_height=40)



        # Campos de entrada comuns

        self.campos = {

            "Data": Spinner(text=self.get_current_date(), values=self.generate_date_range(), size_hint_y=None, height=40),

            "CTC": TextInput(),

            "Inicio Desembarque": Button(text="Gerar Tempo", on_press=self.gerar_tempo, size_hint_y=None, height=40),

            "Final Desembarque": Button(text="Gerar Tempo", on_press=self.gerar_tempo, size_hint_y=None, height=40),

            "Coletor": TextInput(),

            "Critica Inicio": Button(text="Gerar Tempo", on_press=self.gerar_tempo, size_hint_y=None, height=40),

            "Critica Fim": Button(text="Gerar Tempo", on_press=self.gerar_tempo, size_hint_y=None, height=40),

            "Volumes Saída": TextInput(),

            "Volumes S/ Leitura": TextInput(),

            "Qtde CT-es": TextInput(),

            "Qtde NF": TextInput(),

            "Peso KG": TextInput(),

            "Peso Cubado": TextInput()

        }



        for label_text, input_widget in self.campos.items():

            label = Label(text=label_text + ":", size_hint_y=None, height=40)

            campos_layout.add_widget(label)

            campos_layout.add_widget(input_widget)



            # Aplica cores específicas para os labels, texto e fundo

            if "CTC" in label_text or "Coletor" in label_text:

                label.color = [0.87, 0.44, 0, 1]  # Cor #DE6F00

                input_widget.background_color = [0.87, 0.44, 0, 1]  # Cor de fundo #DE6F00

                input_widget.foreground_color = [0.27, 0.27, 0.27, 1]  # Cor do texto #474747

            elif "Critica Inicio" in label_text or "Critica Fim" in label_text or "Volumes S/ Leitura" in label_text:

                label.color = [1, 0.21, 0.21, 1]  # Cor #FF3737

                input_widget.foreground_color = [0.27, 0.27, 0.27, 1]  # Cor do texto #474747



        # Layout dos campos de entrada ao ScrollView

        scroll_view.add_widget(campos_layout)



        # Botão para enviar dados

        submit_button = Button(text="Enviar Dados", on_press=self.enviar_dados, size_hint_y=None, height=40)

        root_layout.add_widget(submit_button)



        # Configurar o navegador Chrome

        self.browser = webdriver.Chrome()

        self.browser.get("https://onedrive.live.com")

        time.sleep(2)  



        return root_layout



    def get_current_date(self):

        return datetime.now().strftime("%d/%m/%Y")



    def generate_date_range(self):

        current_date = datetime.now()

        end_date = current_date + timedelta(days=60)  # Adiciona 60 dias à data atual



        date_range = []



        while current_date <= end_date:

            date_range.append(current_date.strftime("%d/%m/%Y"))

            current_date += timedelta(days=1)



        return date_range



    def gerar_tempo(self, instance):

        # Atualizar o campo com a hora atual

        field_button = instance

        field_button.text = self.get_current_time()



    def get_current_time(self):

        return datetime.now().strftime("%H:%M:%S")



    def enviar_dados(self, instance):

     



        # Exibir mensagem de envio

        popup = Popup(title='Dados Enviados',

                      content=Label(text='Os dados foram enviados com sucesso.'),

                      size_hint=(None, None), size=(400, 200))

        popup.open()



        # Limpar campos preenchidos

        for label_text, input_widget in self.campos.items():

            if isinstance(input_widget, TextInput) or isinstance(input_widget, Spinner):

                input_widget.text = ''



class DadosAppSelenium(BaseDadosApp):

    def mostrar_pop_up(self, instance):



        # Crie um pop-up com uma mensagem

        mensagem = "Dados enviados com sucesso!"

        popup = Popup(title='Status do Envio', content=Label(text=mensagem), size_hint=(None, None), size=(400, 200))



       



        # Limpe os campos de entrada

        for input_widget in self.campos.values():

            input_widget.text = ""



        # Abra o pop-up

        popup.open()



if __name__ == '__main__':

    DadosAppSelenium().run()

 

Resultado do código...

Capturadetela2023-12-26172925.png.33b17d5c87dca017847cce3c4cfd36ce.png

Capturadetela2023-12-26172548.thumb.png.6e228d64ee8ede9eb80a78b200b4262e.png

 

 

Mas refiz o código para ele achar a planilha automaticamente dentro do OneDrive, dai já não estava funcionando corretamente e não estou conseguindo consertar.

 

from kivy.app import App

from kivy.uix.boxlayout import BoxLayout

from kivy.uix.label import Label

from kivy.uix.scrollview import ScrollView

from kivy.uix.gridlayout import GridLayout

from kivymd.uix.textfield import MDTextField

from kivymd.uix.button import MDRaisedButton

from selenium import webdriver

from selenium.webdriver.common.by import By




class DadosApp(App):

    def build(self):

        self.browser = webdriver.Chrome(executable_path="C:/webdriver/chromedriver.exe")



        root_layout = BoxLayout(orientation='vertical', padding=10, spacing=10)



        # Título centralizado

        titulo_label = Label(text="Empresa", font_size=18, color=[1, 1, 1, 1], size_hint_y=None, height=40)

        root_layout.add_widget(titulo_label)



        # ScrollView para rolar a interface

        scroll_view = ScrollView()

        root_layout.add_widget(scroll_view)



        # Layout para os campos de entrada

        campos_layout = GridLayout(cols=2, spacing=10, size_hint_y=None, row_force_default=True, row_default_height=40)



        # Campos de entrada

        self.campos = {

            "CTC": MDTextField(),

            "Data": MDTextField(),

            "Coletor": MDTextField(),

            "Inicio Desembarque": MDTextField(),

            "Final Desembarque": MDTextField(),

            "Critica Inicio": MDTextField(),

            "Critica Fim": MDTextField(),

            "Volumes Saída": MDTextField(),

            "Volumes S/ Leitura": MDTextField(),

            "Qtde CT-es": MDTextField(),

            "Qtde NF": MDTextField(),

            "Peso KG": MDTextField(),

            "Peso Cubado": MDTextField()

        }



        for label_text, input_widget in self.campos.items():

            label = Label(text=label_text + ":", color=[1, 1, 1, 1], size_hint_y=None, height=40)

            campos_layout.add_widget(label)

            campos_layout.add_widget(input_widget)



        # Layout dos campos de entrada ao ScrollView

        scroll_view.add_widget(campos_layout)



        # Botão para enviar dados

        submit_button = MDRaisedButton(text="Enviar Dados", on_press=self.enviar_dados, size_hint_y=None, height=40)

        root_layout.add_widget(submit_button)



        return root_layout



    def realizar_login_onedrive(self, username, password):

        self.browser.get("https://onedrive.live.com/login/")

       

        # Preencher os campos de login e senha e fazer login

    def navegar_para_planilha(self):

        # Vá para a URL da sua planilha

        self.browser.get("https://onedrive.live.com/login/")



    def preencher_planilha(self):

       

        

        # Exemplo:

        data_input = self.browser.find_element(By.ID)

        data_input.send_keys()



    def enviar_dados(self, instance):

        # Realize o login no OneDrive 

        username = "******************"

        password = "*********"

        self.realizar_login_onedrive(username, password)



        # Navegue até a planilha Desembarque Python

        self.navegar_para_planilha()



        # Preencha a planilha

        self.preencher_planilha()



        # Feche o navegador após a conclusão

        self.browser.quit()



if __name__ == '__main__':

    DadosApp().run()

 

 

Quem puder me ajudar agradeço muito!!!

  • Amei 1
Postado

@Nicolas Bruno

Em 27/12/2023 às 16:35, Nicolas Bruno disse:


Mas refiz o código para ele achar a planilha automaticamente dentro do OneDrive, dai já não estava funcionando corretamente e não estou conseguindo consertar.

você tem que dizer o erro, falha, duvida, bug ou situação esperada/que ocorre e qual parte do código deveria fazer isso.
a maioria vai abrir sua duvida e fechar ao ver o código, niguém gosta de fatorar código inteiro dos outros para entender o que ele faz 😆

  • Obrigado 1
Postado

Entendi, 1000 desculpas! 😆

Não é gerado um erro em si, mas a automatização não está funcionando para o OneDrive, então com esse código ele está falhando na hr de realizar login e senha automático e já partir para planilha onde seria inseridos os dados. Quando executado aparece o app e em seguida a página para entrada no OneDrive, mas não sai de lá. 

Estou procurando o código correto para automatizar a entrada no OneDrive e já ir direto na planilha que ele deve receber os dados implantados no App.

  • Obrigado 1
Postado
Em 27/12/2023 às 16:35, Nicolas Bruno disse:

 

 

    def realizar_login_onedrive(self, username, password):

        self.browser.get("https://onedrive.live.com/login/")

    def navegar_para_planilha(self):

        self.browser.get("https://onedrive.live.com/login/")

    def preencher_planilha(self):

        data_input = self.browser.find_element(By.ID)

        data_input.send_keys()

    def enviar_dados(self, instance):

        # Realize o login no OneDrive 

        username = "******************"

        password = "*********"

        self.realizar_login_onedrive(username, password)

 

 

Quem puder me ajudar agradeço muito!!!

pelo que entendi você está usando o navegador para realizar login? já considerou usar a API?
 uso da APIsobre a API

 

retirando todo o código do seu aplicativo, você consegue logar no onedrive e acessar os dados sem problemas usando esse método direto no navegador?
 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...