【问题标题】:wait until page refreshed等到页面刷新
【发布时间】:2012-12-05 14:00:27
【问题描述】:

以下是我在 Python 中使用 Selenium Webdriver 尝试做的事情的描述: 我有我的网站,它将特定产品的各种参数作为输入,并使用这些参数输出产品的价格。我将除一个参数外的所有参数保持不变,并在 for 循环中改变一个特定参数,以查看价格如何根据该特定参数而变化。一旦我更改了参数,我就提交了表单,然后我使用隐式等待如下:

submit_btn.click()
driver.implicitly_wait(10)  
driver.find_element_by_name("Buy_Product")
soup=BeautifulSoup(driver.page_source)

当输入第一组参数时,页面是清晰的,它不包含名称为“Buy_Product”的按钮,所以我正在使用该行

driver.find_element_by_name("Buy_Product")

确保代码等待该按钮出现,这意味着页面现在包含我要提取的价格。 问题是,当我更改参数并尝试获取新价格时,第二次通过循环时,“Buy_Product”按钮已经存在,因此隐式等待不再起作用,有时它会在价格有时间之前使用上一个 page_source要被更新。 棘手的部分是,有时即使对于不同的参数,价格也是相同的,所以我不能只检查价格的可见文本是否发生了变化。 任何想法如何在不使用 time.sleep 的情况下解决这个问题?

【问题讨论】:

  • wait_for_page_load() 被删除了吗...?
  • 您是重新加载整个页面还是使用 javascript 更新价格?
  • 您提交了一个呈现新页面 Edu 的表单

标签: python selenium webdriver wait selenium-webdriver


【解决方案1】:

这里的情况有点棘手...我不确定...如果这有帮助...但是试试...

我的建议是关于 JavaScript 注入,我在其中检查页面是否已完全加载并等到那时。 (c#代码sn-p)

IWait<IWebDriver> Driver_Wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
Driver_Wait.Until(Driver => ((IJavaScriptExecutor)JS_Driver).ExecuteScript("return document.readyState").Equals("complete"));

我希望这会有所帮助....一切顺利:-)

【讨论】:

    【解决方案2】:

    如果 Anuragh27crony 的解决方案对您不起作用,您可能还需要考虑等待 jquery 处于非活动状态。 代码看起来基本相同,但传入这个 javascript 调用:

    ExecuteScript("return jQuery.active == 0")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 2012-12-19
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      相关资源
      最近更新 更多