Только выберите строки, а не заголовок из таблицы в HTML - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь очистить таблицу от веб-сайта, и мой окончательный вывод должен быть табличными данными из первого столбца .

Таблица структурирована так, как показано на рисунке ниже:

enter image description here

Интересующие меня строки находятся под классами row и alt. Выполнение приведенного ниже кода также приводит к получению трех ненужных ячеек: одна из первой строки align = "right", одна из второй строки class="gna" и одна из последней строки, которая настроена точно так же, как и первая строка - align = "right".

wb := ComObjCreate("InternetExplorer.Application")
wb.Visible := True
wb.Navigate("C:\Users\Marian\Downloads\webpage.htm")
; Wait for page to load:
While wb.Busy or wb.ReadyState != 4
    Sleep, 100

Table := wb.document.getElementById("gvSearchResults")
Rows := Table.rows
Loop % rows.length 
{
    cells := rows[A_Index-1].cells

        out .= cells["0"].innerText ","

    out := RTrim(out,",") "`n"
}
Msgbox, %out%

Как можно добавить больше фильтров к выходу, чтобы ограничить результаты только требуемыми ячейками? Спасибо!

LE: Я думаю, что getElementsbyClassname и queryselectorall() не работают, потому что протокол html для этой веб-страницы их не поддерживает.

HTML-код начинается с:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0021)http://www.google.com -->  ;This was adapted according to the comment section
<HTML><HEAD><META content="IE=7.0000" http-equiv="X-UA-Compatible">
<TITLE>ECSD |>> Files</TITLE>

1 Ответ

0 голосов
/ 18 мая 2019

Я бы использовал querySelectorAll, чтобы получить все строки .row и .alt.После этого вы можете просто пропустить последнюю строку в цикле

rows := wb.document.querySelectorAll("#gvSearchResults tr.row, #gvSearchResults tr.alt")
Loop % rows.length - 1   ;-1 added to skip the last row 
{
    cells := rows[A_Index-1].cells

        out .= cells["0"].innerText ","

    out := RTrim(out,",") "`n"
}
Msgbox, %out%

Редактировать на основе комментариев.У рассматриваемой страницы есть тег <META content="IE=7.0000" http-equiv="X-UA-Compatible">, который заставляет IE работать в режиме совместимости IE7.IE7 не поддерживает querySelectorAll.

Это решение также работает, когда IE работает в режиме IE7.Это не очень гибко, так как вы должны знать, какие строки нужно пропустить заранее.

wb := ComObjCreate("InternetExplorer.Application")
wb.Visible := True
wb.Navigate("C:\Users\Marian\Downloads\webpage.htm")
; Wait for page to load:
While wb.Busy or wb.ReadyState != 4
    Sleep, 100

Table := wb.document.getElementById("gvSearchResults")
Rows := Table.rows
Loop % rows.length - 1 ;-1 added to skip the last row
{
   if (A_index = 1 OR A_index = 2) ;skip the first and the second iteration of the loop, effectively skipping the first and the second row of the table;
   continue   

   cells := rows[A_Index-1].cells
   out .= cells["0"].innerText ","
   out := RTrim(out,",") "`n"
}
Msgbox, %out%
...