2012-12-05 56 views
8

下面是我在Python中使用Selenium Webdriver時要做的事情的描述: 我有我的網站,它將特定產品的各種參數作爲輸入,並用這些參數輸出產品的價格。除了一個參數外,我保持所有參數不變,並在for循環中改變一個特定參數,以查看價格如何根據特定參數而變化。一旦我改變參數i提交表單,然後我用含蓄等待如下:等到頁面刷新

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?

+0

是否已移除'wait_for_page_load()'...? – Izkata

+0

你正在重新加載整個頁面或使用JavaScript更新價格? – Edu

+0

你提交一個表格,呈現一個新頁面Edu – luckyfool

回答

1

的情況是這裏的東西...貓膩我不知道......如果這有助於...但給一個嘗試...

我的建議是JavaScript注入,其中i檢查頁面完全加載並等待至此。 (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")); 

我希望這有助於....所有最好的:-)

+0

謝謝,我將試試python – luckyfool

+0

@luckyfool - 爲你做了這個工作嗎? –

1

如果Anuragh27crony的解決方案並不爲你工作,你可能還需要考慮一下等待的jQuery不活躍。 該代碼看起來大致相同,但通過此javascript調用,而不是:

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