代码之家  ›  专栏  ›  技术社区  ›  CDNthe2nd

python+selenium:等待元素完全加载

  •  3
  • CDNthe2nd  · 技术社区  · 7 年前

    所以我一直在尝试利用硒的功能,它被称为:

    wait = WebDriverWait(browser, 20).wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button')))
    wait.click()
    

    在我开始说这个问题之前。我要做的是让硒自动写在这张图片的前厅:

    Pic1

    这不是什么复杂的事情。但是,每当我按下“skapa konto”时,它就会加载并等待,直到出现一个新页面,即:

    Pic2

    这是上面的图片。我的想法是,我希望它应该等到它给我“图片”(这是相同的链接,这样它就不会做任何更改),所以我认为最好的做法是等到一个文本等“fortstt or hello”是浏览器。然后继续。

    但是,我在尝试使用这个时遇到了一个问题。原因是,它不会等到找到它,而是立即执行它不应该执行的其他操作。现在,它只是跳过等待,就像函数不工作或根本不存在一样。我做错了什么?


    更新:

    我所知道的是,每当我尝试在网站上注册时,网站不会改变,这意味着当它成为一个成功的帐户时,它会带我进入一个新的页面。但它会自动刷新并说它成功了。这意味着我想以某种方式制作一些东西,让它检查并查看页面上是否发生了新的事情。如果没有,请再次等待并重试?…像那样?

    我要做的是检查是否有:

    <div class="confirmation-title nsg-font-family--platform nsg-text--black edf-title-font-size--xlarge js-confirmationTitle">NU ÄR DU MEDLEM, Hello.</div>
    

    <button type="button" class="nsg-button nsg-bg--black register-next-step-cta js-nextStepCta">FORTSÄTT</button>
    

    然而,正如我所说,每当我按下“skapa konto”时,问题就出现了——它只是等待服务器重新检查,然后自动刷新页面,并说成功。

    1 回复  |  直到 7 年前
        1
  •  3
  •   undetected Selenium    7 年前

    首先,我坚信你是非常亲密的。您只需将代码格式化为 蟒蛇的 这可以立即解决您的问题,如下所示:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button'))).click()
    

    你在实际问题上说了一句话 它不会等到它被发现,但会立即发生,并做其他它不应该做的事情。 而不是提及你的程序应该做什么(例如 你的代码测试 )你的程序出了什么问题(即 错误堆栈跟踪 )

    根据 HTMLS 你已经分享了,你可以为任何一个 Web元素 如下:

    • 等待文本的可见性 努·杜梅德林,你好。 :

      • CSS选择器:

        WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.confirmation-title.nsg-font-family--platform.nsg-text--black.edf-title-font-size--xlarge.js-confirmationTitle")))
        
      • XPath:

        WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='confirmation-title nsg-font-family--platform nsg-text--black edf-title-font-size--xlarge js-confirmationTitle' and contains(.,'NU ÄR DU MEDLEM, Hello.')]")))
        
    • 带文字按钮的服务员 福茨特 :

      • CSS选择器:

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.nsg-button.nsg-bg--black.register-next-step-cta.js-nextStepCta")))
        
      • XPath:

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='nsg-button nsg-bg--black register-next-step-cta js-nextStepCta' and contains(.,'FORTSÄTT')]")))