none
IMPORTAR TABELA(HTML) NO WEBBROWSER(C# RRS feed

  • Pergunta

  • Bom dia, 

    é possível eu obter esta tabela em um data grid no meu winform?


    <table class="table table-bordered table-hover" cellspacing="0" rules="all" border="1" id="dgDocumentos" style="border-collapse:collapse;">
    	<tbody><tr class="HeaderStyleNovo">
    		<td>N° Doc.</td><td>&nbsp;&nbsp;&nbsp;&nbsp;Valor&nbsp;Nota&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;Valor&nbsp;&nbsp;Total ISSQN</td><td>Data Emissão</td><td class="col-md-3">CPF/CNPJ</td><td>Razão Tomador</td><td>Status</td><td>
                                                                    
                                                                </td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
    	</tr><tr>
    		<td>1</td><td align="right">R$ 2.494,00</td><td align="right">R$ 0,00</td><td>06/05/2016</td><td align="right">33.194.382/0001-90</td><td title="FUNDACAO CENTRO DE ESTUDOS DA SANTA CASA DE C GRANDE" nowrap="nowrap">FUNDACAO CENTRO DE ESTUDOS DA ...</td><td>Cancelado</td><td>
                                                                    <a id="dgDocumentos__ctl3_btnImprimir" class="btn btn-xs btn-info" data-toggle="tooltip" data-container="body" data-placement="top" title="" href="javascript:__doPostBack('dgDocumentos$_ctl3$btnImprimir','')" data-original-title="Visualizar">
                                                                    <i class="nc-eye-4"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <a onclick="return false;" id="dgDocumentos__ctl3_btnCancelar" disabled="disabled" title="" class="btn btn-xs btn-danger" data-toggle="tooltip" data-container="body" data-placement="top" data-original-title="Nota Cancelada">
                                                                                        <i class="nc-cancel"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <a onclick="NC.modalGeneric('PopupErro.aspx?titulo=Justificativa de Cancelamento&amp;erro=1&amp;7E+42+87+F+FD+EE+73+25+89+E+46+70+2A+9C+D3+29+84+83+A7+4D+D5+19+6E+89+57+30+CC+61+50+D+47+ED+6+5A+B0+42+AA+5D+E4+EB+C7+56+12+E4+93+1C+1E+7B+A5+66+3A+96+93+AD+1+33+F9+F6+12+AD+F9+1E+F1+DF+54+76+25+26+75+46+59+8D+76+DB+8A+63+40+9C+AC+A7+C3+A+64+47+4F+1F+D7+82+BD+1+EB+18+C4+B2+AE+98+AD+E1+E3+3A+5F+88+68+4C+', 'Justificativa Cancelamento', '410', '254', 'modal-md'); return false;" id="dgDocumentos__ctl3_imbJustificativaCancelamento" class="btn btn-xs btn-warning" data-toggle="tooltip" data-container="body" data-placement="top" title="" href="javascript:__doPostBack('dgDocumentos$_ctl3$imbJustificativaCancelamento','')" data-original-title="Justificativa de Cancelamento">
                                                                    <i class="nc-file-excel"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <a id="dgDocumentos__ctl3_BtnImprimirDireto" class="btn btn-xs btn-info" data-toggle="tooltip" data-container="body" data-placement="top" title="" href="javascript:__doPostBack('dgDocumentos$_ctl3$BtnImprimirDireto','')" data-original-title="Imprimir">
                                                                    <i class="nc-print-3"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <a id="dgDocumentos__ctl3_BtnEmail" class="btn btn-xs btn-success" data-toggle="tooltip" data-container="body" data-placement="top" title="" href="javascript:__doPostBack('dgDocumentos$_ctl3$BtnEmail','')" data-original-title="Enviar nota por E-mail">
                                                                    <i class="nc-mail"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <ul class="nav navbar-nav navbar-right" style="margin: 0 !important">
                                                                        <li class="dropup">
                                                                            <a href="#" class="dropdown-toggle btn btn-xs btn-info" style="padding: 0;" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="nc-pencil"></i><span class="caret"></span></a>
                                                                            <ul class="dropdown-menu" style="left: auto; right: 0;  !important;">
                                                                                <li>
                                                                                    <a id="dgDocumentos__ctl3_btnGerarCarta" disabled="disabled" class="nc-plus" data-toggle="tooltip" data-container="body" data-placement="top" title="" style="padding: 2px 20px !important;" data-original-title="Não é possível gerar carta de correção para nota cancelada.">Gerar Carta de Correção</a></li>
                                                                                <li>
                                                                                    <a id="dgDocumentos__ctl3_btnVisualizarCarta" class="nc-eye-4" href="javascript:__doPostBack('dgDocumentos$_ctl3$btnVisualizarCarta','')" style="padding: 2px 20px !important;">Visualizar Carta de Correção</a></li>
                                                                            </ul>
                                                                        </li>
                                                                    </ul>
                                                                </td>
    		<td>10</td><td align="right">R$ 5.000,00</td><td align="right">R$ 150,00</td><td>21/09/2016</td><td align="right">774.623.198-53</td><td title="Marina C. B. Marta" nowrap="nowrap">Marina C. B. Marta</td><td>Normal</td><td>
                                                                    <a id="dgDocumentos__ctl12_btnImprimir" class="btn btn-xs btn-info" data-toggle="tooltip" data-container="body" data-placement="top" title="" href="javascript:__doPostBack('dgDocumentos$_ctl12$btnImprimir','')" data-original-title="Visualizar">
                                                                    <i class="nc-eye-4"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <a id="dgDocumentos__ctl12_btnCancelar" disabled="disabled" class="btn btn-xs btn-danger" data-toggle="tooltip" data-container="body" data-placement="top" title="" data-original-title="O prazo limite para realização de cancelamento da nota foi atingido, por favor entre em contato com a prefeitura.">
                                                                                        <i class="nc-cancel"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <a id="dgDocumentos__ctl12_imbJustificativaCancelamento" disabled="disabled" class="btn btn-xs btn-warning" data-toggle="tooltip" data-container="body" data-placement="top" title="" data-original-title="Justificativa de Cancelamento">
                                                                    <i class="nc-file-excel"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <a id="dgDocumentos__ctl12_BtnImprimirDireto" class="btn btn-xs btn-info" data-toggle="tooltip" data-container="body" data-placement="top" title="" href="javascript:__doPostBack('dgDocumentos$_ctl12$BtnImprimirDireto','')" data-original-title="Imprimir">
                                                                    <i class="nc-print-3"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <a id="dgDocumentos__ctl12_BtnEmail" class="btn btn-xs btn-success" data-toggle="tooltip" data-container="body" data-placement="top" title="" href="javascript:__doPostBack('dgDocumentos$_ctl12$BtnEmail','')" data-original-title="Enviar nota por E-mail">
                                                                    <i class="nc-mail"></i>
                                                                    </a>
                                                                </td><td align="center">
                                                                    <ul class="nav navbar-nav navbar-right" style="margin: 0 !important">
                                                                        <li class="dropup">
                                                                            <a href="#" class="dropdown-toggle btn btn-xs btn-info" style="padding: 0;" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="nc-pencil"></i><span class="caret"></span></a>
                                                                            <ul class="dropdown-menu" style="left: auto; right: 0;  !important;">
                                                                                <li>
                                                                                    <a id="dgDocumentos__ctl12_btnGerarCarta" class="nc-plus" href="javascript:__doPostBack('dgDocumentos$_ctl12$btnGerarCarta','')" style="padding: 2px 20px !important;">Gerar Carta de Correção</a></li>
                                                                                <li>
                                                                                    <a id="dgDocumentos__ctl12_btnVisualizarCarta" class="nc-eye-4" href="javascript:__doPostBack('dgDocumentos$_ctl12$btnVisualizarCarta','')" style="padding: 2px 20px !important;">Visualizar Carta de Correção</a></li>
                                                                            </ul>
                                                                        </li>
                                                                    </ul>
                                                                </td>
    	</tr><tr class="pagerstyle">
    		<td colspan="13"><span>1</span>&nbsp;<a href="javascript:__doPostBack('dgDocumentos$_ctl14$_ctl1','')">2</a>&nbsp;<a href="javascript:__doPostBack('dgDocumentos$_ctl14$_ctl2','')">3</a>&nbsp;<a href="javascript:__doPostBack('dgDocumentos$_ctl14$_ctl3','')">4</a>&nbsp;<a href="javascript:__doPostBack('dgDocumentos$_ctl14$_ctl4','')">5</a></td>
    	</tr>
    </tbody></table>



    Como pode ser visto ela só visualiza até 10 notas por page, eu gostaria de importar pro meu datagrid para manipular alguns dados ... eu tentei fazer um web scraping que o andre seco postou : https://www.youtube.com/watch?v=tXGJMUY_pPc , porém no meu foreach , ele ta obteando somente o valor da ultima row, ou seja 1 , 2 , 3 , 4 ,5 que seria os valores da pagina.


    private void button6_Click(object sender, EventArgs e)
            {
    
                WebClient wc = new WebClient();
                string htmlcode = webBrowser1.DocumentText;
                HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                doc.LoadHtml(htmlcode);
    
                dt = new DataTable();
                dt.Columns.Add("N.Doc", typeof(string));
                dt.Columns.Add("Valor NF", typeof(string));
                dt.Columns.Add("Valor ISS", typeof(string));
                dt.Columns.Add("Dt Emissao", typeof(string));
                dt.Columns.Add("CPF CNPJ", typeof(string));
                dt.Columns.Add("RAZAO", typeof(string));
                dt.Columns.Add("STATUS", typeof(string));
                dt.Columns.Add("VIS", typeof(string));
                dt.Columns.Add("CANC", typeof(string));
                dt.Columns.Add("JUST", typeof(string));
                dt.Columns.Add("IMP", typeof(string));
                dt.Columns.Add("ENV", typeof(string));
                dt.Columns.Add("EDT", typeof(string));
                int count = 0;
    
                foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table"))
                {
                    foreach (HtmlNode row in table.SelectNodes("tr"))
                    {
                        if (table.Id == "dgDocumentos")
                        {
                            DataRow dr = dt.NewRow();
                            foreach (var cell in row.SelectNodes("td"))
                            {
                                richTextBox1.Text = cell.InnerText.Replace("&nbsp;", " ");
                                if ((count % 2 == 0))
                                {
                                    dr["nf"] = cell.InnerText.Replace("&nbsp;", " ");
                                }
                                else
                                {
    
                                    dr["Value"] = cell.InnerText.Replace("&nbsp;", " ");
    
                                    // dt.Rows.Add(dr);
                                }
                                count++;
                            }
                        }
    
    
                    }
                    dataGridView1.DataSource = dt;
    
                }
            }


    inicialmente tinha feito com 2 colunas mas n deu certo , to com bastante dificuldade nisto.
    se alguém puder dar uma luz! 
    sexta-feira, 20 de abril de 2018 18:17

Respostas

  • João Vitor,

    Escrevi um exemplo utilizando a biblioteca HtmlAgilityPack, espero que te auxilie.

    Code:

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(@"<table> <tbody> <tr> <th>titulo1</th> <th>titulo2</th> <th>titulo3</th> </tr> <tr> <td>a</td> <td>b</td> <td>c</td> </tr> </tbody> </table>"); var headers = doc.DocumentNode.SelectNodes("//tr/th");

    DataTable table = new DataTable();

    foreach (HtmlNode header in headers) table.Columns.Add(header.InnerText);

    foreach (var row in doc.DocumentNode.SelectNodes("//tr[td]")) table.Rows.Add(row.SelectNodes("td").Select(td => td.InnerText).ToArray()); dataGridView1.DataSource = table;

    Aqui neste exemplo, carreguei uma table html simples de 3 colunas e 1 linha... Fiz o laço dentro dos nodes tr/th para entendê-los como cabeçalho, e sequencialmente na linhas td/td.

    Espero ter contribuído com algo!

    []'s



    sexta-feira, 20 de abril de 2018 19:05