Как я могу проверить, существует ли селектор в кукловоде? - PullRequest
0 голосов
/ 02 ноября 2019

В кукловоде, как я могу проверить, если, например, существует #idProductType, и если нет, установить тип продукта ""? Я перепробовал много вещей, но это не работает. Заранее спасибо.

            const urls = [myurls, ...]
            const productsList = [];
            for (let i = 0; i < urls.length; i++) {
                const url = urls[i];

                await Promise.all([
                    page.goto(url),
                    page.waitForNavigation({ waitUntil: 'networkidle0' }),
                ]);

                let products = await page.evaluate(() => {

              //here i want to test if #idProductType exists do : 
                    let producttype = document.querySelector('#idProductType').innerText;
              //else 
                    let producttype = "";
              //and same thing for other selectors

                    let productsubtype = document.querySelector('#idProductSubType').innerText;
                    let product = document.querySelector('#idProduct').innerText;
                    let description = document.querySelector('td.js-orderModelVer').innerText;
                    let reference = document.querySelector('td.text-nowrap').innerText;
                    let prixpub = document.querySelector('td.text-nowrap.text-right.js-pricecol-msrp').innerText;
                    let dispo = document.querySelector('td.text-nowrap.text-center.js-pricecol-availability').innerText;
                    let retire = document.querySelector('td.js-retired-filler-cell').innerText;

                    let results = [];
                    results.push({
                        producttype: producttype,
                        productsubtype: productsubtype,
                        product: product,
                        description: description,
                        reference: reference,
                        prixpub: prixpub,
                        dispo: dispo,
                        retire: retire
                    })
                    return results
                })
                productsList.push(products);
            }

Ответы [ 2 ]

2 голосов
/ 02 ноября 2019

querySelector() возвращает значение null, если в DOM нет доступного элемента с определенным селектором

Таким образом, вы можете написать простую вспомогательную функцию:

const getInnerTextForSelector = (selector) => {
    const element = document.querySelector(selector);
    if (element)
        return element.innerText;
    return '';
};

и запустить, например, для#idProductType селектор:

const producttype = getInnerTextForSelector('#idProductType');

Или вы можете написать помощник, который будет работать на странице кукловода и ElementHandle's:

const getElementForSelector = async (page, selector) => {
    return (await element.$(selector)) || undefined;
};

export const getInnerText = async (page, selector) => {
    const elementForSelector = await getElementForSelector(page, selector);
    try {
        if (elementForSelector)
            return (
                (await elementForSelector.evaluate(element => {
                    return element.innerText;
                })) || ''
            );
    } catch {
        return '';
    }
};

, а затем запустить, например, селектор #idProductType:

const producttype = await getInnerText(page, '#idProductType');
1 голос
/ 03 ноября 2019

Думаю, я найду способ сделать это, я не знаю, будет ли это лучшим решением:

            var producttype = "";
            try {
                var producttype = document.querySelector('#idProductType').innerText;
            } catch (err) {
                console.log("The element didn't appear.")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...