2012-12-05 16 views
8

पाइथन में सेलेनियम वेबड्राइवर का उपयोग करके मैं क्या करने का प्रयास कर रहा हूं: मेरी वेबसाइट है जो एक विशिष्ट उत्पाद के लिए विभिन्न पैरामीटर इनपुट के रूप में लेती है और उत्पाद के लिए उन मानकों के साथ मूल्य का उत्पादन करती है। मैं सभी को एक पैरामीटर स्थिर रखता हूं और लूप के लिए एक विशिष्ट पैरामीटर बदलता हूं यह देखने के लिए कि कीमत उस विशिष्ट पैरामीटर के अनुसार कैसे भिन्न होती है। एक बार जब मैं मानदंड को बदलना मैं पत्र भरना होगा और उसके बाद मैं परोक्ष इंतजार का उपयोग इस प्रकार है:पेज रीफ्रेश किए जाने तक प्रतीक्षा करें

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

जब मापदंडों के पहले सेट में प्रवेश पेज स्पष्ट है और यह तो मैं नाम के साथ buttton शामिल नहीं है "Buy_Product" यकीन है कि कोड है कि बटन के लिए इंतजार कर रहा है प्रकट करने के लिए जो मतलब होगा पेज अब कीमत मैं निकालने के लिए चाहते हैं बनाने के लिए लाइन

driver.find_element_by_name("Buy_Product") 

उपयोग कर रहा हूँ। समस्या यह है कि लूप के माध्यम से दूसरी बार जब मैं पैरामीटर बदलता हूं और नई कीमत प्राप्त करने का प्रयास करता हूं तो बटन "Buy_Product" पहले से मौजूद है, इसलिए निश्चित रूप से इंतजार अब काम नहीं करता है और कभी-कभी यह पिछले पृष्ठ_सोर्स को कीमत से पहले ले जाएगा अद्यतन करने के लिए समय। मुश्किल हिस्सा यह है कि कभी-कभी विभिन्न मानकों के लिए भी कीमत समान होती है, इसलिए मैं यह जांच नहीं सकता कि कीमत का दृश्यमान टेक्स्ट बदल गया है या नहीं। किसी भी विचार को टाइम.sleep का उपयोग किए बिना हल किया जा सकता है?

+0

'wait_for_page_load है()' हटा दिया गया ...? – Izkata

+0

क्या आप पूरे पृष्ठ को पुनः लोड कर रहे हैं या जावास्क्रिप्ट के साथ मूल्य अपडेट कर रहे हैं? – Edu

+0

आप एक नया फॉर्म प्रस्तुत करते हैं जो एक नया पृष्ठ प्रस्तुत करता है Edu – luckyfool

उत्तर

1

स्थिति यहां मुश्किल कुछ है ... मैं यकीन नहीं है ... अगर यह मदद करता है ... लेकिन आजमाइए ...

मेरे सुझाव, जावास्क्रिप्ट इंजेक्शन पर है मैं जहां अगर जाँच पृष्ठ पूरी तरह से भरा हुआ है और यह तब तक इंतजार कर रहा है। (ग # कोड स्निपेट)

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

धन्यवाद, मैं इसे पाइथन – luckyfool

+0

@luckyfool में आज़मा दूंगा - क्या यह आपके लिए काम करता है? –

1

Anuragh27crony के समाधान आप के लिए काम नहीं करता है, तो आप भी jQuery के लिए इंतज़ार कर के बारे में सोचना चाहते हो सकता है निष्क्रिय होना कोड ज्यादातर ही दिखाई देगा, लेकिन इसके बजाय इस javascript कॉल में पारित:

ExecuteScript("return jQuery.active == 0") 
संबंधित मुद्दे