Jump to content

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


Carlos Pais

Recommended Posts

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
  •  😵😴🥵🥴  No Desenvolvimento as Possibilidades são Infinitas  😵😴🥵🥴 , podemos é ficar doidos ...
Link to comment
Share on other sites

  • 3 months later...
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.

Link to comment
Share on other sites

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? 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

  • 1 year later...

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?

Link to comment
Share on other sites

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

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.

Link to comment
Share on other sites

  • 6 months later...
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

Link to comment
Share on other sites

  • 4 months later...
'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
  •  😵😴🥵🥴  No Desenvolvimento as Possibilidades são Infinitas  😵😴🥵🥴 , podemos é ficar doidos ...
Link to comment
Share on other sites

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>
Edited by thoga31
GeSHi
Link to comment
Share on other sites

  • 11 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.