【问题标题】:Python + Selenium: Wait until element is fully loadedPython + Selenium:等到元素完全加载
【发布时间】:2018-11-01 06:40:16
【问题描述】:

所以我一直在尝试使用 Selenium 中调用的函数:

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()

在我开始说问题之前。我要做的 Selenium 基本上是在这张图片中制作一个自动写入论坛的 Selenium:

这不是任何并发症。但是,每当我按“Skapa Konto”时,它都会加载并等待直到出现一个新页面:

就是上图。我的想法是,我希望它应该等到它给我那个“图片”(这是同一个链接,所以它不会做任何改变)所以我认为最好做的是等到一个文本等“FORTSÄTT或 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”时 - 它只是等待服务器仔细检查,然后自动刷新页面并显示成功。

【问题讨论】:

  • 你能在 WebDriverWait 之后删除 .wait 并尝试。根据官方文档,应该是 element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
  • @CDNthe2nd 看来你是脆弱的绝对 xpath 的受害者。使用相关的 HTML 更新问题
  • 没有用@Satish - 我会在几分钟内为你们俩更新我的问题!
  • 完成! @DebanjanB!我希望我做对了或者你的意思!

标签: python selenium selenium-webdriver webdriver webdriverwait


【解决方案1】:

首先,我坚信你们非常接近。您只需要在 Pythonic 中格式化您的代码,这可以立即解决您的问题,如下所示:

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

您通过提及 它不会等到它发现,而是立即执行它不应该做的其他事情,而不是提及您的程序应该做什么,从而为实际问题拉了一块地毯做(例如你的代码试验)以及你的程序做错了什么(例如错误堆栈跟踪)。

根据您分享的 HTMLs,您可以为任一 WebElements 引入服务员,如下所示:

  • 等待文字的可见性NU ÄR DU MEDLEM, Hello.

    • CSS_SELECTOR:

      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.')]")))
      
  • 等待带有文本FORTSÄTT的按钮:

    • CSS_SELECTOR:

      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')]")))
      

【讨论】:

  • 哦,我们走了!是的,这确实有帮助!现在它做了我想要的。我真的很感激你,我感激不尽!
  • @CDNthe2nd 随意涂鸦The ‘Say Thanks’ Project. :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 2014-03-05
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多