Щелкните первую ячейку таблицы без идентификатора и тега A - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь нажать на первую ячейку таблицы без идентификатора и без тега.После нажатия на первую ячейку мне предлагается загрузить ZIP-файл.Затем я извлеку zip-файл и импортировал извлеченный csv-файл в MySQL Table.У меня все сделано, кроме нажатия на первую ячейку.Мне просто нужна помощь при нажатии на первую ячейку, чтобы загрузить файл.Пожалуйста, помогите.

Вот скриншот таблицы:

https://imgur.com/a/PUR1y1t

Заголовок таблицы

<table class="htCore">
<colgroup>
  <col class="rowHeader" style="width: 50px;">
  <col style="width: 90px;">
  <col style="width: 147px;">
  <col style="width: 144px;">
  <col style="width: 208px;">
  <col style="width: 512px;">
</colgroup>
<thead>
  <tr>
     <th class="" style="height: 25px;">
        <div class="relative"><span class="colHeader cornerHeader">&nbsp;</span></div>
     </th>
     <th class="">
        <div class="relative"><span class="colHeader columnSorting">Operation</span></div>
     </th>
     <th class="">
        <div class="relative"><span class="colHeader columnSorting">Requested ID</span></div>
     </th>
     <th class="ht__highlight">
        <div class="relative"><span class="colHeader columnSorting">Requested Date</span></div>
     </th>
     <th class="ht__highlight">
        <div class="relative"><span class="colHeader columnSorting">Status</span></div>
     </th>
     <th class="ht__highlight">
        <div class="relative"><span class="colHeader columnSorting">RequestInfo</span></div>
     </th>
  </tr>
</thead>

Тело

<tbody>
      <tr>
     <th class="ht__highlight ListView_Current">
        <div class="relative"><span class="rowHeader">1</span></div>
     </th>
     <td class="htDimmed ListView_Current">M/R</td>
     <td class="htDimmed ListView_Current">20190127220652968</td>
     <td class="htDimmed highlight">01/27/2019 22:06:52</td>
     <td class="htDimmed highlight">Completed</td>
     <td class="htDimmed highlight">(FileName,DNBCC_MGMR_20190127220652968.zip),(FileSize,721234),(SiteName,Atlantic, Tomorrows Office),(Depot Name,),(CSV Separator,,),(Download to,Your PC),(CSV Type,Detail),(Search Range(MM/DD/YYYY),01/21/2019-01/27/2019),(Customer,),(Device S/N,),(Vendor,)</td>
      </tr>
      <tr>
     <th class="">
        <div class="relative"><span class="rowHeader">2</span></div>
     </th>
     <td class="htDimmed">M/R</td>
     <td class="htDimmed">20190127220158966</td>
     <td class="htDimmed">01/27/2019 22:01:58</td>
     <td class="htDimmed">Completed</td>
     <td class="htDimmed">(FileName,DNBCC_MGMR_20190127220158966.zip),(FileSize,721249),(SiteName,Atlantic, Tomorrows Office),(Depot Name,),(CSV Separator,,),(Download to,Your PC),(CSV Type,Detail),(Search Range(MM/DD/YYYY),01/21/2019-01/27/2019),(Customer,),(Device S/N,),(Vendor,)</td>
      </tr>
      <tr>
     <th class="">
        <div class="relative"><span class="rowHeader">3</span></div>
     </th>
     <td class="htDimmed">M/R</td>
     <td class="htDimmed">20190127215611964</td>
     <td class="htDimmed">01/27/2019 21:56:11</td>
     <td class="htDimmed">Completed</td>
     <td class="htDimmed">(FileName,DNBCC_MGMR_20190127215611964.zip),(FileSize,721257),(SiteName,Atlantic, Tomorrows Office),(Depot Name,),(CSV Separator,,),(Download to,Your PC),(CSV Type,Detail),(Search Range(MM/DD/YYYY),01/21/2019-01/27/2019),(Customer,),(Device S/N,),(Vendor,)</td>
  </tr>

</tbody>
</table>

Я пробовал следующее, но я получаю System.Windows.Forms.HtmlElement.InnerText.get ничего не возвращал ошибку:

Dim tables As HtmlElementCollection = 
 WebBrowser1.Document.GetElementsByTagName("div") - also "table"
    For Each tbl As HtmlElement In tables
        For Each row As HtmlElement In tbl.All
            For Each cell As HtmlElement In row.All
                If Not cell.Style Is Nothing Then
                    If cell.InnerText.Contains("M/R") Then - also tried InnerHtml
                        cell.InvokeMember("click") 
                    End If
                End If
            Next
        Next
    Next

А также javascript:

function downloadFile(fileName, fileSize) {
var downloadForm = $('<form 
action="https://ssd.support.thewebsite.com/atremotecenter/DL" method="get">
<input type="text" name="Content-Type" value="application/x-www-form-urlencoded; charset=UTF-8"/><input type="text" name="Accept-Encoding" value="gzip"/>
<input type="text" name="X-NRS-User-ID" value="myusername"/><input type="text" name="X-NRS-Certificate" value="iHmkmuotsGXfYF/VVp8U5l5YT68pNywANPF7Hk1FH8zUyWPFWPdQ7LwCyJcubSjhDegily9s+CgO5r+ip8aWZnuqeyWKYG2uXnb0KXgV8To0sxmCHIjNPedSBgzHUNK0W5eZeoeUP02w8TpBoPsF4g=="/>
<input type="text" name="X-NRS-File-Name" value="'+fileName+'"/> . 
<input type="text" name="Range" value="bytes=0-'+(fileSize-1)+'"/> . 
</form>').hide().appendTo('body');
downloadForm.submit();
downloadForm.remove();
return false;
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Поскольку в вашей таблице установлен атрибут class, вы можете использовать его для его идентификации.Тогда это просто вопрос получения первых <tbody> и первых <tr> внутри них.

'Iterate all elements with the "htCore" class.
For Each htCore As HtmlElement In WebBrowser1.Document.GetElementsByClassName("htCore")
    'Check if the element is a table.
    If htCore.TagName.Equals("table", StringComparison.OrdinalIgnoreCase) Then

        'Get all <tbody> elements in the table.
        Dim tbodies As HtmlElementCollection = htCore.GetElementsByTagName("tbody")
        If tbodies.Count > 0 Then

            'Get all <tr> elements in the first body.
            Dim rows As HtmlElementCollection = tbodies(0).GetElementsByTagName("tr")
            If rows.Count > 0 Then
                'Invoke click on the first row.
                rows(0).InvokeMember("click")
                Exit For 'Stop looping.
            End If

        End If

    End If
Next
0 голосов
/ 28 января 2019

Надеюсь, это то, что вы ищете.Вам нужно будет поместить веб-браузер в форму Windows.

В форму вызова / событие введите следующий код, чтобы помочь настроить веб-браузер:

    'WebBrowser1.ObjectForScripting = [.NET object]  
    WebBrowser1.ScriptErrorsSuppressed = True
    WebBrowser1.AllowNavigation = True

Затем вызовите функцию навигации веб-браузера:

    WebBrowser1.Navigate("http://www.example.com")  

Наконец, в событие Webbrowser1.documentCompleted поместите следующее:

    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim strFileName As String
        Dim lngFileSize As Long

        'You will still need to get this information from the html contents of the table.
        strFileName = "DNBCC_MGMR_20190127215611964.zip"
        lngFileSize = 721257

        WebBrowser1.Document.InvokeScript("downloadFile", {strFileName, lngFileSize})
    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...