VB
Size: a a a
VB
OI
waitFor самописная штука, вы можете использовать любую ф-цию либы, которая ждет пока предиката будет true (например мы хотим ждать 10 секунд и чекать каждые пол секунды наше условие).puppeteerOI
export const forceElement = async (page: Page, selector: string): Promise<ElementHandle> => {
await waitFor(
() => isElementFound(page, selector),
`Element with selector: "${selector}" was not found`
);
await waitFor(
() => isElementVisible(page, selector),
`Element with selector: "${selector}" was not visible, but found`
);
return await page.$(selector);
};OI
isElementFound() и isElementVisible()OI
const isElementFound = async (page: Page, selector: string): Promise<boolean> => {
const element = await page.$(selector);
return element !== null;
};пупетир $ ищет элемент в ДОМе. Если его еще нет там, то остальные проверки бесмысленныеOI
const isElementVisible = async (page: Page, selector: string): Promise<boolean> => {
const element = await page.$(selector);
const style = await page.evaluate((node) => window.getComputedStyle(node as unknown as Element), element);
const hasVisible = await hasVisibleBoundingBox(element);
return style && style.visibility !== 'hidden' && hasVisible;
};эти части я подсмотрел внутри puppeteerOI
hasVisibleBoundingBox()OI
const hasVisibleBoundingBox = async (element: ElementHandle): Promise<boolean> => {
const rect = await element.boundingBox();
return rect !== null;
};OI
OI
export const click = async (
page: Page, selector: string, delay: number = clickDelay
): Promise<void> => {
const element = await forceElement(page, selector);
await element.click({ delay });
};
OI
SC
SC
BO
SC
BO
B
VB
const isElementVisible = async (page: Page, selector: string): Promise<boolean> => {
const element = await page.$(selector);
const style = await page.evaluate((node) => window.getComputedStyle(node as unknown as Element), element);
const hasVisible = await hasVisibleBoundingBox(element);
return style && style.visibility !== 'hidden' && hasVisible;
};эти части я подсмотрел внутри puppeteerawait page.$(selector); - похоже работать будет только если CSS селекторOI
OI