以下是我在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的情况下解决这个问题吗?
发布于 2012-12-06 06:35:20
这里的情况很棘手...I‘m not sure...if this helps...but a a try...
我的建议是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"));
我希望这个helps....All是最好的:-)
发布于 2013-01-31 00:07:53
如果Anurah27crony的解决方案对您不起作用,那么您可能还需要考虑等待jquery处于非活动状态。代码看起来基本相同,但是传入了这个javascript调用:
ExecuteScript("return jQuery.active == 0")
https://stackoverflow.com/questions/13724924
复制