Кукольник - итерации строк таблицы и флажок для указания строки c - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть таблица, в которой первый столбец является флажком для каждой строки, и я хотел бы установить флажок для строки, содержащей конкретный c текст в определенном столбце указанной строки.

Пример

X | Dave | Smith
X | Bill | Jones

Iterate through all rows and then check the box in the first column if the row has "Jones" for the last name column (col 3)

На сайте есть несколько отличных примеров для извлечения данных из таблицы и просто вывода указанных данных, но я хочу на самом деле перебрать каждую строку и затем выполнить действие над элементом в данной ячейке на основе необходимых требований.

пример очистки

const result = await page.$$eval('#example-table tr', rows => {
  return Array.from(rows, row => {
    const columns = row.querySelectorAll('td');
    return Array.from(columns, column => column.innerText);
  });
});

console.log(result[1][2]); // "C2"

Приведенный выше пример отлично подходит для простого извлечения данных в 2D-массив, но я надеюсь перебрать каждую строку в поисках указанного c текста в указанном столбце c, а затем выполнить действие щелчка по элементу в столбце 0, чтобы установить флажок.

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

Я пробовал много неудачных попыток когда-нибудь ng вот так.

const rows = await page.$$eval('table tbody tr', (rows) => {
    const cols = await page.$$eval('table tbody tr td', (cols) => {
        for (let i=0; i<rows.length; i++) {
            for (let j=0; j<cols.length; j++) {
                // if row[i] col[2] == desired text
                // then check box in row[i] col[0]
            }
        }
    })
}

Не уверен, что мне нужно 2-е для l oop для столбцов (возможно, лучше иметь его вместо нет?), так как я знаю, в каком столбце будет текст, который я проверяю и знайте, что первым полем строки всегда является флажок.

Я также зацикливался на том, как я взаимодействую (щелкаю, получаю текст) с элементом в расположении этой таблицы в качестве итерации.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 15 апреля 2020

Вероятно, лучше повторить tr:

await page.evaluate(() => {
  // find the tr with Jones
  let tr = [...document.querySelectorAll('tr')].find(tr => tr.innerText.match(/Jones/))
  if(tr){
    // find the checkbox and click it
    let cb = tr.querySelector('input[type="checkbox"]')
    if(cb) {
      cb.click()
    }
  }
})
...