Usuário com melhor resposta
Ler e modificar html com WEBBROWSER do C# e Obejtos DOM.

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
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
- Editado Rafael Almeida - MVPMVP quarta-feira, 14 de outubro de 2015 01:19
- Sugerido como Resposta Rafael Almeida - MVPMVP quarta-feira, 14 de outubro de 2015 02:02
- Marcado como Resposta Marcos SJ quinta-feira, 15 de outubro de 2015 10:49
-
Boa Noite
Pode ficar a vontade
segue resposta
.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
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.
-
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.
-
-
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
-
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
-
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
- Editado Rafael Almeida - MVPMVP quarta-feira, 14 de outubro de 2015 01:19
- Sugerido como Resposta Rafael Almeida - MVPMVP quarta-feira, 14 de outubro de 2015 02:02
- Marcado como Resposta Marcos SJ quinta-feira, 15 de outubro de 2015 10:49
-
-
Boa Noite
Pode ficar a vontade
segue resposta
.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
-
-
-
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
-
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"); } }
-
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 ???
-
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