Jump to content
Carlos Pais

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

Recommended Posts

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

 

 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
General
22 hours ago, Carvalho2017 said:

Boas,

Também tenho este problema.

Alguém me pode ajudar?

Obrigado.

Já chegaste alguma conclusão?

 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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? 

Share this post


Link to post
Share on other 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

 

Share this post


Link to post
Share on other sites
Guest

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 ...

Edited by Guest

Share this post


Link to post
Share on other 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?

 

Share this post


Link to post
Share on other 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? 

  • Vote 1

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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!

  • Vote 1

Share this post


Link to post
Share on other 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?

 

Share this post


Link to post
Share on other 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).

Share this post


Link to post
Share on other 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.

  • Vote 1

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Kurt Kobin
Em 17 de Julho de 2018 às 15:33, General disse:

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.

Olá General,

Estou a tentar importar dados do site do e-fatura via VBA(excel) e não estou a conseguir. Sou contabilista e era uma ferramenta essencial para poder brincar com os dados que estão no portal e os dados da empresa. Pode fornecer parte do código de autenticação ou dar pistas para o poder fazer?

 

obrigado e é bom ver gente boa a partilhar conhecimentos.

Kurt

Share this post


Link to post
Share on other sites
ad1967

Boa tarde,

Acerca deste tema, alguém me pode ajudar na importação do ficheiro ?

Tenho que fazer uma rotina para ir buscar as faturas registadas e nem sei por onde começar.

Obrigado

Share this post


Link to post
Share on other sites
Carlos Pais
'Fazer Login no SITE das é-factura
Dim Navigate = "https://www.acesso.gov.pt/jsp/loginRedirectForm.jsp?&partID=EFPF&authVersion=1&_csrf=45a2d3fb-e4b4-4ae2-ab5a-b98412a3113c&selectedAuthMethod=N&username=" & UtilizadorFiscalTextBox & "&password=" & PasswordFiscalTextBox & ""
WebBrowser1.Navigate(Navigate)
  'Importar Ficheiro (*.json)
         Try
            Dim dataInicioFilter = Format(DateTimePicker1.Value, "yyyy-MM-dd")
            Dim dataFimFilter = Format(DateTimePicker2.Value, "yyyy-MM-dd")
            Dim Navigate = "https://faturas.portaldasfinancas.gov.pt/json/obterDocumentosAdquirente.action?dataInicioFilter=" & dataInicioFilter & "&dataFimFilter=" & dataFimFilter & "&ambitoAquisicaoFilter=TODOS"
            ToolStripStatusLabel1.Text = Navigate
            WebBrowser1.Navigate(Navigate)
        Catch ex As Exception
            MsgBox("Não está a Ser possivel Carregar os Dados ... Tente Mais Tarde", vbCritical)
        End Try

 

Share this post


Link to post
Share on other sites
ad1967

Boas,

Tenho este código que estou a tentar fazer login e não estou a conseguir. Além me pode dar uma ajuda?

Falhando o login, todo o resto é para esquecer e não dá para continuar.

Já utilizei o "get" e agora experimentei com o "post"!

 

 <script>
 function eFaturas() {
    var jEFTUSER = document.CORPO.xEFTUSER.value ;
    var jEFTPASS = document.CORPO.xEFTPASS.value ;
    var jDATA1 = document.CORPO.xDATA1.value ;
    var jDATA2 = document.CORPO.xDATA2.value ;
    var jDATA1 = jDATA1.substring(6,10)+"-"+jDATA1.substring(3,5)+"-"+jDATA1.substring(0,2) ;
    var jDATA2 = jDATA2.substring(6,10)+"-"+jDATA2.substring(3,5)+"-"+jDATA2.substring(0,2) ;
    var url = "https://www.acesso.gov.pt/jsp/loginRedirectForm.jsp?&partID=EFPF&authVersion=1&_csrf=45a2d3fb-e4b4-4ae2-ab5a-b98412a3113c&selectedAuthMethod=N&username="+jEFTUSER+"&password="+jEFTPASS ;
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open("POST", url, true);
  xmlhttp.send();
alert(typeof(xmlhttp)); // só para testes
alert(xmlhttp.length); // só para testes
    var url = "https://faturas.portaldasfinancas.gov.pt/json/obterDocumentosAdquirente.action?dataInicioFilter="+jDATA1+"&dataFimFilter="+jDATA2+"&ambitoAquisicaoFilter=TODOS";
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open("POST", url, true);
  xmlhttp.send();
  document.CORPO.xDADOS.value = JSON.parse(xmlhttp.responseText);
 }
 </script>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.