Puppeteer => Как получить доступ ко всем <td>в цикле на <tr>тегах - PullRequest
1 голос
/ 03 ноября 2019

Мне нужно получить доступ к тд с определенным значением, но для этого мне нужно дополнительно определить номер строки и тд номер, в котором находится это конкретное значение (таблица изменяется во времени, и мне нужен универсальный подход). Я думал о подсчете номера строки и номера ячейки в двух циклах, поэтому, как только я найду искомое значение, я смогу извлечь номера строк и ячеек. Вопрос, как только я начну перебирать строки, как получить доступ ко всем tds каждой строки?

const rows = await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr');
for (var i = 0; i < rows.length; i++) {
  // how to iterate over the tds?
}

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

зависит от того, что вы хотите сделать, но это один из способов получить индекс элемента, а также элемент (конкретный тд в вашем случае).

const rows = await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr');
rows.map((trNode, index) => {
   // here you have access to your node + index of it
});
0 голосов
/ 04 ноября 2019

Если вы знали, что номер столбца вашей таблицы всегда один и тот же, то вы можете зациклить его, выбрав только td. Сделать цикл внутри цикла сложно, и в основном он медленнее, чем один цикл. Например, ваша таблица содержит 5 столбцов.

let this_row, this_col;
let column = 5; // Specify your column number here
const data = await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr > td');

for (let i = 0; i < data.length; i++) {
    // Here you can find row number for every td by doing this
    this_row = Math.ceil( (i + 1)/column )
    // Here you can find column number by doing this
    this_col = (i + 1) % column
}

Если ваша таблица динамическая и имеет неизвестное количество столбцов и строк, то ваш код будет выглядеть следующим образом.

let this_row, this_col;
const data = await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr > td');
const row_num = (await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr > td:nth-child(1)')).length;
const column = data.length / row_num;

for (let i = 0; i < data.length; i++) {
    // Here you can find row number for every td by doing this
    this_row = Math.ceil( (i + 1)/column )
    // Here you can find column number by doing this
    this_col = (i + 1) % column
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...