等到页面刷新

时间:2012-12-05 14:00:28

标签: python selenium webdriver wait selenium-webdriver

以下是我在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的情况下解决这个问题?

2 个答案:

答案 0 :(得分:1)

这种情况在这里很棘手......我不确定......如果这有帮助......但是试一试......

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

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"));

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

答案 1 :(得分:1)

如果Anuragh27crony的解决方案不适合您,您可能还想考虑等待jquery无效。 代码看起来大致相同,但是传递这个javascript调用:

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