Ir para o conteúdo
Carlos Pais

Importação automática dos documentos existentes no portal do E-Fatura

Mensagens Recomendadas

Carlos Pais

Boas

Alguém já tem algum código , ou alguma ideia de como fazer a importação automática dos documentos existentes no portal do E-Fatura.

Sem ser pelo ficheiro que eles lá tem da importação (e-fatura.csv), pois essa importação não separa os documentos por taxas de IVA ..

Já tenho um código para fazer o login automático no site .. que é o seguinte:

        Try
            Dim IE
            IE = CreateObject("InternetExplorer.Application")
            IE.Visible = True
            IE.FullScreen = False
            IE.AddressBar = True
            IE.StatusBar = True
            IE.Toolbar = False
            '  IE.Width = Ambiente.Width - 200
           '   IE.Height = Ambiente.Height - 200
            IE.top = 100
            IE.left = 100
            IE.Navigate("https://faturas.portaldasfinancas.gov.pt/consultarDocumentosAdquirente.action")
            Do While IE.Busy
                System.Threading.Thread.Sleep(100)
            Loop
            IE.Navigate("https://faturas.portaldasfinancas.gov.pt/consultarDocumentosAdquirente.action")

            Do While IE.Busy
                System.Threading.Thread.Sleep(100)
            Loop

            IE.Document.All("username").InnerText = "???????????" ' Nº Contribuinte
            IE.Document.all("password").focus()
            IE.Document.All("password").InnerText = "?????????????" ' Senha do Portal
            IE.Document.All("sbmtLogin").Click()


        Catch ex As Exception

            MsgBox("Erro: Volte a Tentar", MsgBoxStyle.Critical)

        End Try

 

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Carvalho2017
Em ‎15‎-‎02‎-‎2017 às 13:13, Carlos Pais disse:

Boas

Alguém já tem algum código , ou alguma ideia de como fazer a importação automática dos documentos existentes no portal do E-Fatura.

Sem ser pelo ficheiro que eles lá tem da importação (e-fatura.csv), pois essa importação não separa os documentos por taxas de IVA ..

Já tenho um código para fazer o login automático no site .. que é o seguinte:


        Try
            Dim IE
            IE = CreateObject("InternetExplorer.Application")
            IE.Visible = True
            IE.FullScreen = False
            IE.AddressBar = True
            IE.StatusBar = True
            IE.Toolbar = False
            '  IE.Width = Ambiente.Width - 200
           '   IE.Height = Ambiente.Height - 200
            IE.top = 100
            IE.left = 100
            IE.Navigate("https://faturas.portaldasfinancas.gov.pt/consultarDocumentosAdquirente.action")
            Do While IE.Busy
                System.Threading.Thread.Sleep(100)
            Loop
            IE.Navigate("https://faturas.portaldasfinancas.gov.pt/consultarDocumentosAdquirente.action")

            Do While IE.Busy
                System.Threading.Thread.Sleep(100)
            Loop

            IE.Document.All("username").InnerText = "???????????" ' Nº Contribuinte
            IE.Document.all("password").focus()
            IE.Document.All("password").InnerText = "?????????????" ' Senha do Portal
            IE.Document.All("sbmtLogin").Click()


        Catch ex As Exception

            MsgBox("Erro: Volte a Tentar", MsgBoxStyle.Critical)

        End Try

 

 

Boas,

Também tenho este problema.

Alguém me pode ajudar?

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
General
22 hours ago, Carvalho2017 said:

Boas,

Também tenho este problema.

Alguém me pode ajudar?

Obrigado.

Já chegaste alguma conclusão?

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Carvalho2017

Creio que por esta via não conseguimos obter as faturas dos fornecedores.

Por aqui, apenas obtê-los por via da exportação para excel.

Eu pretendia o acesso direto a essa informação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
General
2 hours ago, Carvalho2017 said:

Creio que por esta via não conseguimos obter as faturas dos fornecedores.

Por aqui, apenas obtê-los por via da exportação para excel.

Eu pretendia o acesso direto a essa informação.

string param = "username=MyUserName&password=123456";
string url = "https://lms.nust.edu.pk/portal/login/index.php";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentLength = param.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = new CookieContainer();

using (Stream stream = request.GetRequestStream())
{
    byte[] paramAsBytes = Encoding.Default.GetBytes(param);
    stream.Write(paramAsBytes, 0, paramAsBytes.Count());
}

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    foreach (var cookie in response.Cookies)
    {
        var properties = cookie.GetType()
                               .GetProperties()
                               .Select(p => new 
                               { 
                                   Name = p.Name, 
                                   Value = p.GetValue(cookie) 
                               });

        foreach (var property in properties)
        {
            Console.WriteLine ("{0}: {1}", property.Name, property.Value);
        }
    }
}

Isso é uma das coisas que tenho para fazer.. Se quiseres podemos partilhar informação. O que tenho aqui é um código que penso que poderás aproveitar para fazer login automatico ao site. Depois dentro podes fazer um post json para obteres a informação. Que achas trocarmos emails? 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
General
Just now, General said:

string param = "username=MyUserName&password=123456";
string url = "https://lms.nust.edu.pk/portal/login/index.php";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentLength = param.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = new CookieContainer();

using (Stream stream = request.GetRequestStream())
{
    byte[] paramAsBytes = Encoding.Default.GetBytes(param);
    stream.Write(paramAsBytes, 0, paramAsBytes.Count());
}

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    foreach (var cookie in response.Cookies)
    {
        var properties = cookie.GetType()
                               .GetProperties()
                               .Select(p => new 
                               { 
                                   Name = p.Name, 
                                   Value = p.GetValue(cookie) 
                               });

        foreach (var property in properties)
        {
            Console.WriteLine ("{0}: {1}", property.Name, property.Value);
        }
    }
}

Isso é uma das coisas que tenho para fazer.. Se quiseres podemos partilhar informação. O que tenho aqui é um código que penso que poderás aproveitar para fazer login automatico ao site. Depois dentro podes fazer um post json para obteres a informação. Que achas trocarmos emails? 

No caso do site das finanças o url é : https://www.acesso.gov.pt/jsp/loginRedirectForm.jsp?&partID=EFPF

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
derrerter

Bem, uma vez que não há webservice para consumir, e não há, parece fácil fazer uns ciclos para sacar todos os documentos.

Uma iteração para o intervalo total, no fim do json está o número de documentos para esse intervalo.

Controlar cada ciclo, para verificar se ultrapassou os 300 documentos. (se sim reduzir o intervalo)

No fim, controlar o número total de documentos

As linhas é o mesmo principio. Por cada documentId (dos totais), iterar para obter as linhas.(aqui a resposta não é apenas um json, mas uma página inteira onde teremos que localizar e ler o json array)

bla bla bla ...

Editado por derrerter

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
CarlosA

Desculpem a intromissão, mas já alguém conseguiu programar algo que consiga importar as faturas registadas no efatura?

Em caso afirmativo, é possível partilhar?

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
General
4 hours ago, CarlosA said:

Desculpem a intromissão, mas já alguém conseguiu programar algo que consiga importar as faturas registadas no efatura?

Em caso afirmativo, é possível partilhar?

 

É que linguagem de programação pretendes? 

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
General

Ainda não estou a trabalhar nisso mas a ideia que eu tenho é usar um robô tipo https://www.nuget.org/packages/Selenium.WebDriver para fazeres o login e guardares os cookies e depois fazer um post via AJAX com o pedido enviando essas mesmas credenciais. De certeza que irá funcionar.

Já agora, alguém sabe como enviar a DMR (Declaração Mensal de Renumerações) programaticamente sem webservice?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
CarlosA
2 minutes ago, General said:

É que linguagem de programação pretendes? 

Olá General,

Idealmente, algo que não necessitasse de software suplementar/auxiliar.

Se fosse em Excel VBA, então era espetacular!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
General
Just now, CarlosA said:

Olá General,

Idealmente, algo que não necessitasse de software suplementar/auxiliar.

Se fosse em Excel VBA, então era espetacular!

Em VBA não tenho... tenho a ideia em C# mas é programador?

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
CarlosA
Just now, General said:

Em VBA não tenho... tenho a ideia em C# mas é programador?

 

Não sou um programador. Faço algumas coisitas em VBA, apenas (autodidata).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
General
9 minutes ago, CarlosA said:

Não sou um programador. Faço algumas coisitas em VBA, apenas (autodidata).

Olá em VBA também podes fazer seguindo a minha ideia.

http://www.tomasvasquez.com.br/forum/viewtopic.php?t=4250
 

Public Sub Untitled()
Dim selenium As New SeleniumWrapper.WebDriver
selenium.start "firefox", "http://agenciaweb.celesc.com.br:8080/"
selenium.setImplicitWait 5000

selenium.open "/AgenciaWeb/autenticar/autenticar.do"
selenium.type "name=sqUnidadeConsumidora", 26911222
selenium.click "id=CPJ"
selenium.type "name=numeroDocumentoCNPJ", 03774688002107
selenium.clickAndWait "css=input.botao"
selenium.type "name=senha", "SENHA"
selenium.clickAndWait "css=input.botao"
selenium.clickAndWait "link=» Histórico de Pagamento"
selenium.clickAndWait "link=01/2016"
selenium.click "id=download"

selenium.stop

Fazes Login Via selenium:
Guardas os cookies do cookiecontainer 
Post com o pedido usandos os cookies.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
CarlosA
20 hours ago, General said:

Olá em VBA também podes fazer seguindo a minha ideia.

http://www.tomasvasquez.com.br/forum/viewtopic.php?t=4250
 


Public Sub Untitled()
Dim selenium As New SeleniumWrapper.WebDriver
selenium.start "firefox", "http://agenciaweb.celesc.com.br:8080/"
selenium.setImplicitWait 5000

selenium.open "/AgenciaWeb/autenticar/autenticar.do"
selenium.type "name=sqUnidadeConsumidora", 26911222
selenium.click "id=CPJ"
selenium.type "name=numeroDocumentoCNPJ", 03774688002107
selenium.clickAndWait "css=input.botao"
selenium.type "name=senha", "SENHA"
selenium.clickAndWait "css=input.botao"
selenium.clickAndWait "link=» Histórico de Pagamento"
selenium.clickAndWait "link=01/2016"
selenium.click "id=download"

selenium.stop

Fazes Login Via selenium:
Guardas os cookies do cookiecontainer 
Post com o pedido usandos os cookies.

General,

Agradeço o feedback.

Estive a analisar a informação, mas como referi não ser um verdadeiro programador, naturalmente que também tenho dificuldades em implementar o que indicaste.

Estava à procura de algo em Excel VBA, mas já mais elaborado.

Obrigado, de qualquer modo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.