Как мне дождаться загрузки страницы в селене после щелчка?

Я запускаю скрипт очистки веб-страниц, и я не могу найти ничего надежного, позволяющего перезагрузить страницу, когда вы щелкаете ссылку до того, как в скрипте будет запущена следующая строка кода. Ниже показано, что я делаю сейчас, хотя это работает, я знаю, что это зависит от времени загрузки и определенно неэффективно. Кто-нибудь знает, есть ли метод doThisWhenPageLoads (), который я могу использовать, это селен. Кстати, я использую узел, если это важно.

setTimeout(async () => {
        await driver.findElement(By.xpath('//*[@id="navigation"]/div[1]/ul/li[1]/div/div[1]/a')).click()
    }, 1500)
    // setTimeout(async () => {
        await driver.manage().timeouts().implicitlyWait(10, 10).findElement(By.xpath('//*[@id="navigation"]/div[1]/ul/li[1]/div/div[1]/div/div[2]/div[1]/ul/li[2]/a')).click()
    // }, 2500)
    setTimeout(async () => {
        await driver.findElement(By.xpath('//*[@id="content"]/div/div/div[2]/div/header/div/div[3]/nav/ul/li[1]/div/div/ul/li[6]/a')).click()
    }, 4500)
    setTimeout(async () => {
        await driver.findElement(By.xpath('//*[@id="content"]/div/div/div[2]/div/header/div/div[3]/nav/ul/li[1]/div/div[2]/ul/li[6]/ul/li[3]/a')).click()
    }, 6500)
    setTimeout(async () => {
        await driver.findElement(By.xpath('//*[@id="content"]/div/div/div[2]/div/header/div/div[3]/nav/ul/li[1]/div/div[2]/ul/li[6]/ul/li[3]/ul/li[2]/a')).click()
    }, 8500)
    setTimeout(async () => {
        const target = await driver.findElements(By.xpath('//ul[contains(@class, "product-list")]/li'))

        let arr = await target.map(async (x, index) => {
            let title = await x.findElement(By.xpath(`//li[${index + 1}]/div/div/div/div/div/div`)).getText()
            let price = await x.findElement(By.xpath(`//li[${index + 1}]/div/div/div/div/div[2]/form/div/div/div`)).getText()
            let pricePer100ml = await x.findElement(By.xpath(`//li[${index + 1}]/div/div/div/div/div[2]/form/div/div/div[2]`)).getText()
            let ok = { title, price, pricePer100ml }
            console.log(ok)
            return ok
        })
        console.log(arr)
    }, 13500)

Если это стандартная загрузка страницы, Selenium уже ждет (для состояния PageReady) по умолчанию. Если вместо этого щелчок генерирует обновление Javascript DOM, вам необходимо использовать webdriverwait: selenium.dev/selenium/docs/api/dotnet/html/…

pcalkins 30.03.2021 02:09
0
1
25
0

Другие вопросы по теме