Seleniumのように、特定の要素のテキストが表示されるのを待つのと同じような方法があるのでしょうか。私はこのようなものを試しましたが、待っているようには見えません:
await page.waitForSelector('.count', {visible: true});
waitForFunction
を使用できます。 https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagewaitforfunctionpagefunction-options-args を参照してください
答えを完全にするための@elenaのソリューションを含める:
await page.waitForFunction('document.querySelector(".count").innerText.length == 7');
Nilobarpからの回答で提示された方法とは別に、これを行うにはさらに2つの方法があります。
疑似セレクター :empty
を使用すると、子ノードやテキストを含まない要素を見つけることができます。これを :not
セレクターと組み合わせると、 page.waitForSelector
を使用して、空でないセレクターを照会できます。
await page.waitForSelector('.count:not(:empty)');
要素が空でないことを確認するだけでなく、要素に含まれるテキストも確認する場合は、 page.waitForX
を使用してXPath式を使用できます。
await page.waitForXPath("//*[@class='count' and contains(., 'Expected text')]");
この行は、ページ上にclass="count"
属性を持ち、テキストExpected text
を含む要素が存在する場合にのみ解決されます。
page.waitFor()
を使用して関数を渡すこともできますor待機するCSSセレクター。
関数を待つ
要素が input
フィールドである場合、 value
であることを確認する前に、_.count
_要素が存在することを確認できます潜在的なエラーを回避するために存在します:
_await page.waitFor(() => {
const count = document.querySelector('.count');
return count && count.value.length;
});
_
要素がnot an input
フィールドである場合、それを確認する前に_.count
_要素が存在することを確認できます innerText
は、潜在的なエラーを回避するために存在します。
_await page.waitFor(() => {
const count = document.querySelector('.count');
return count && count.innerText.length;
});
_
CSSセレクターを待機
要素が input
を含む placeholder
フィールドであり、 value
は現在存在しています。:not(:placeholder-shown)
を使用できます:
_await page.waitFor('.count:not(:placeholder-shown)');
_
要素が input
であるフィールドで、notに placeholder
が含まれていて、 value
属性に文字列が含まれている場合は、:not([value=""])
を使用できます。
_await page.waitFor('.count:not([value=""])');
_
要素がnotである場合、子要素ノードを持たない input
フィールドの場合、:not(:empty)
を使用して要素を待機できます。テキストを含めるには:
_await page.waitFor('.count:not(:empty)');
_
XPathを待つ
それ以外の場合は、 page.waitForXPath()
を使用して、XPath式がページ上の要素を検索するのを待つことができます。
次のXPath式は、count
以外の要素に追加のクラスが存在する場合でも機能します。つまり、_.count
_ではなく_[class="count"]
_のように機能します。
要素が input
フィールドの場合、次の式を使用して value
属性に文字列が含まれるのを待つことができます。
_await page.waitForXPath('//*[contains(concat(" ", normalize-space(@class), " "), " test ") and string-length(@value) > 0]')
_
要素がnot an input
フィールドの場合、次の式を使用して、要素にテキストが含まれるのを待つことができます。
_await page.waitForXPath('//*[contains(concat(" ", normalize-space(@class), " "), " count ") and string-length(text()) > 0]');
_
waitForFunction()
を使用して実行できる最善の解決策(奇妙な関数を文字列として避けてください):
const selector = '.count';
await page.waitForFunction(
selector => document.querySelector(selector).value.length > 0,
{},
selector
);
テキストのタイプに応じて、value
をinnerText
に置き換えます。
チェック puppeteer API