none
Ler e modificar html com WEBBROWSER do C# e Obejtos DOM. RRS feed

  • Pergunta

  • Amigos, saudações.

    Mensalmente preciso enviar alguns arquivos para um site do governo.

    O problema é que são muitos arquivos, cerca de 300 e a pagina só permite enviar um arquivo por vez,

    tem um botao onde voce clica e aponta o local onde esse arquivo esta. Ou seja tem que fazer isso 300 vezes.

    entao criei um form em C# com um componentes webbrowse e a ideia é carregar um array com o path e nome dos arquivos.

    ate ai é facil, ja tenho o codigo.

    como posso fazer a manipulação dos nós do DOM para inserir esse path  dos arquivos?

    pesquisei na net mas nao achei muita coisa sobre DOM dentro de um componte webbrowser.

    agradeço a ajuda.

    Marcelo Augusto

    quinta-feira, 8 de outubro de 2015 00:53

Respostas

  • Boa noite Marcelo,

    Acredito que o erro acontece por não ter o tempo suficiente de carregar a página.

    Troque seu código por esse e teste

    WebBrowser1.Navigate("https://www.nfp.fazenda.sp.gov.br/login.aspx?ReturnUrl=%2fPrincipal.aspx");
    while(WebBrowser1.ReadyState != WebBrowserReadyState.Complete)
    {
            System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
            Application.DoEvents();

    }
    WebBrowser1.Document.GetElementById("UserName").SetAttribute("value","usuarioxyz");

    Espero ter ajudado!

    dúvidas

    rafaelalmeida@jamsoft.com.br

      


    quarta-feira, 14 de outubro de 2015 01:15
  • Boa Noite

    Pode ficar a vontade

    segue resposta

      WebBrowser1.Document.GetElementById("ID_DO_BOTAO_OU_LINK").InvokeMember("click");



    *****************************************************
    Rafael Almeida Programador Sênior - JAMSOFT Sistemas
    rafaelalmeida@jamsoft.com.br
    www.jamsoft.com.br
    *****************************************************
    Asp.Net 5 Vnext, C# 6, Entity Framework e SQL Server
    *****************************************************

    • Sugerido como Resposta Rafael Almeida - MVPMVP quarta-feira, 14 de outubro de 2015 23:24
    • Marcado como Resposta Marcos SJ quinta-feira, 15 de outubro de 2015 10:50
    quarta-feira, 14 de outubro de 2015 23:24

Todas as Respostas

  • Olá marcelo as,

    Tudo bem?

    Se você pesquisou somente em português, há de fato uma grande chance de você não encontrar o que precisa. Já tentou fazer esta pesquisa em inglês. A pesquisa em inglês sempre retorna um número muito maior de resultados.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 8 de outubro de 2015 13:27
  • Olá marcelo as,

    Pode ter sido um erro de carregamento de sua página que acabou fazendo com que a sua resposta não fosse postada aqui.


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    • Marcado como Resposta Marcos SJ terça-feira, 13 de outubro de 2015 18:02
    • Não Marcado como Resposta Marcos SJ quinta-feira, 15 de outubro de 2015 10:50
    • Editado Marcos SJ quinta-feira, 15 de outubro de 2015 10:51
    terça-feira, 13 de outubro de 2015 18:02
  • mas eu respondi agradecendo, não sei porque nao constou ai no forum

    terça-feira, 13 de outubro de 2015 21:15
  • Amigo para entender melhor você quer automatizar a tarefa de carregar o arquivo no site da prefeitura?

    Será que isso é algo que deveria ser feito? Será que é a melhor forma? Que arquivo é esse? Não tem uma forma de integrar o sistema? 

    Com mais dados normalmente aparecem mais pessoas pra ajudar e indicar qual a melhor solução.

    Se cuide,

    {}'s

    terça-feira, 13 de outubro de 2015 21:51
  • Amigo para entender melhor você quer automatizar a tarefa de carregar o arquivo no site da prefeitura?

    Será que isso é algo que deveria ser feito? Será que é a melhor forma? Que arquivo é esse? Não tem uma forma de integrar o sistema? 

    Com mais dados normalmente aparecem mais pessoas pra ajudar e indicar qual a melhor solução.

    Se cuide,

    {}'s

    Com certeza deve ser feito, veja a dificuldade de um escritorio contabil mandar 300 arquivos um por vez já que o site nao permite o envio por lote. é perfeitamente legal e etico tenho a senha de acesso para executar o serviço, nao tem nada improprio no meu questionamento.

    infelizmente é a unica forma pois o sistema deles nao tem webservice algum.

    o arquivo é a movimentação da nota fiscal paulista. sao 30 arquivos por maquina e tem 10 maquinas aqui para enviar.

    eu comecei a estudar o DOM para tentar fazer um loop e apontar cada arquivo na pasta visto que o site nao gera captha. estou tendo dificuldades pois quando tento referenciar o objeto por sua id gera um erro dizendo que a id nao existe estou fando assim:

    private void Form1_Load(object sender, EventArgs e)
            {
               WebBrowser1.Navigate("https://www.nfp.fazenda.sp.gov.br/login.aspx?ReturnUrl=%2fPrincipal.aspx");
               WebBrowser1.Document.GetElementById("UserName").InnerText = "usuarioxyz";
               
            }

    Agradeço a ajuda se possivel.

    o fato é que nao acho muita coisa na net falando sobre DOM no C# com componente webbrowser.

    abraços

    marcelo

    terça-feira, 13 de outubro de 2015 23:40
  • Boa noite Marcelo,

    Acredito que o erro acontece por não ter o tempo suficiente de carregar a página.

    Troque seu código por esse e teste

    WebBrowser1.Navigate("https://www.nfp.fazenda.sp.gov.br/login.aspx?ReturnUrl=%2fPrincipal.aspx");
    while(WebBrowser1.ReadyState != WebBrowserReadyState.Complete)
    {
            System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
            Application.DoEvents();

    }
    WebBrowser1.Document.GetElementById("UserName").SetAttribute("value","usuarioxyz");

    Espero ter ajudado!

    dúvidas

    rafaelalmeida@jamsoft.com.br

      


    quarta-feira, 14 de outubro de 2015 01:15
  • Obrigado por me ajudar nisso.

    funcionou perfeitamente aqui  obrigado, nao querendo abusar voce sabe como simular o vendo click do botao enviar ?

    abraços

    obrigado

    quarta-feira, 14 de outubro de 2015 14:11
  • Boa Noite

    Pode ficar a vontade

    segue resposta

      WebBrowser1.Document.GetElementById("ID_DO_BOTAO_OU_LINK").InvokeMember("click");



    *****************************************************
    Rafael Almeida Programador Sênior - JAMSOFT Sistemas
    rafaelalmeida@jamsoft.com.br
    www.jamsoft.com.br
    *****************************************************
    Asp.Net 5 Vnext, C# 6, Entity Framework e SQL Server
    *****************************************************

    • Sugerido como Resposta Rafael Almeida - MVPMVP quarta-feira, 14 de outubro de 2015 23:24
    • Marcado como Resposta Marcos SJ quinta-feira, 15 de outubro de 2015 10:50
    quarta-feira, 14 de outubro de 2015 23:24
  • muito obrigado amigo ajudou muito

    abraços

    marcelo

    sexta-feira, 16 de outubro de 2015 16:31
  • meu amigo graças a Deus e a você , funcionou perfeitamente.

    agora posso avançar

    abraços

    marcelo

    sexta-feira, 16 de outubro de 2015 16:36
  • a todos os colegas do grupo obrigado por me ajudarem na minha thread.

    agora ja consigo avançar na pagina de login, inserindo a senha e user name é clicando(simulando) no botao enviar.

    agora vou fazer um loop para poder enviar varios arquivos numa tacada só.

    ainda nao sei como fazer mas vou correr atras , acho que vou colocar o nome e path de cada arquivo em um array c# e depois passar para o form.

    abraços

    marcelo

    sexta-feira, 16 de outubro de 2015 16:39
  • Amigos saudações.

    referente essa thread quero agradecer a todos pois estou quase alcançando o objeito.

    porei me deparei com um problema ao tentar enviar os arquivos para  o site

    tem um input type=file onde eu passo o caminho onde esta o arquivo para upload eu monto a string assim: c:\nota\empresa01\arquivo.txt.  porem ao enviar da erro na pagina e nao envia.

    notei que no input em situação normal fica armazenado só o nome do arquivo arquivo.txt

    deduzi que o form em algum ponto faz a separação da pasta e do nome do arquivo, nao estou conseguindo descobrir isso, é so o que falta para obter sucesso na aplicação.

    agradeço a ajuda dos colegas.

    segue o techo principal do codigo

    private void button3_Click(object sender, EventArgs e) { OpenFileDialog Dialogo = new OpenFileDialog();

    Dialogo.Multiselect = true; Dialogo.Title = "SELEÇÃO DE ARQUIVOS DO CUPOM FISCAL"; Dialogo.Filter = "*.*|*.*"; Dialogo.InitialDirectory = "@c:\nfspaulo"; DialogResult dr = Dialogo.ShowDialog(); ArrayList ListaArq = new ArrayList(); ListaArq.AddRange(Dialogo.FileNames); string meutexto; string meutexto2; for (int i = 0; i < ListaArq.Count - 1; i++) { meutexto = ListaArq[i].ToString(); meutexto2 = meutexto.Replace(@"\\", @"\"); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(15)); WebBrowser1.Document.GetElementById("ctl00_ConteudoPagina_arquivoLote").OuterText = meutexto2; WebBrowser1.Document.GetElementById("ctl00_ConteudoPagina_btnEnviar").InvokeMember("click"); } }


    terça-feira, 20 de outubro de 2015 12:59
  • Boa tarde!!

    Bom estou tentando fazer algo semelhante ao que você fez, porém estou bem mais no início.

    Criei o WebBrowser  porém ele não consegue abrir a página, (coloquei a propriedade url: "https://www.nfp.fazenda.sp.gov.br/login.aspx?ReturnUrl=%2f".

    Mas ele não carrrega dando erros de script, pode me dar uma luz ???

    quarta-feira, 24 de maio de 2017 14:59
  • Saudações colega.

    Nao estou trabalhando mais com c#.

    Nessa empresa estão usando python agora.

    mas tenho uma sugestao que descobri depois. 

    procure no site da sefaz que lá tem webservice pronto para envio e consulta de notas.

    se usar o webservice nao precisa mais manipular o DOM  do html da pagina pois o webservice da secretaria ja faz o trabalho de consulta e envio

    abraços

    marcelo

     

    quarta-feira, 24 de maio de 2017 23:12