एक वेब पेज पूरी तरह से लोड होने तक कोड को रोकने के लिए, मैं लगभग हर समय बड़ी सफलता के साथ नीचे दी गई विधि का उपयोग कर रहा हूं।एक्सेल वीबीए में, यह जांचने का तरीका क्या है कि वेब पेज पूरी तरह लोड हो गया है या नहीं?
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
लेकिन कभी कभी, मैं पाठ सामग्री लोड करने के बाद विधि निर्धारित करता है कि पृष्ठ पूरी तरह लोड, और इतना है कि सामग्री निकाले नहीं है देखते हैं।
हालांकि, अगर मैं एफ 8 के माध्यम से कोड के माध्यम से कदम उठाता हूं, तो सामग्री हर बार निकाली जाती है। यह तेजी से किया जाता है क्योंकि मैं बार-बार F8 कुंजी दबा सकता हूं।
तो मैं पेज को सुनिश्चित करने के लिए कैसे जांच सकता हूं, और इसकी सभी सामग्री डेटा को निकालने के पहले कोड पूरी तरह से लोड हो जाती है?
दोनों मामलों में, आईई अदृश्य चल रहा है। हालांकि, मैंने आईई के साथ यह कोशिश की है और वास्तव में उन पृष्ठों पर इस विशिष्ट स्थान पर सामग्री है जिनके साथ मैं काम कर रहा हूं।
यह वीबीए स्क्रिप्ट का उपयोग करते हुए एक्सेल 2016 में किया जा रहा है। विशिष्ट सामग्री अनुरोध की तरह लिखा है:
'get item name from page and write it to the first cell on the first empty row available
Set itemName = objIE.document.querySelector(".the-item-name")
Worksheets("Results").Range("A1048576").End(xlUp).Offset(1, 0).Value = itemName.innerText
मैं Excel VBA: Wait for JavaScript execution in Internet Explorer के माध्यम से पढ़ा है, क्योंकि मुझे लगता है कि शायद मूल्यों के बाद दस्तावेज़ लोड किया जाता है जोड़ा जा रहा है, डेटा scraping से किसी को रोकने के प्रयास में। हालांकि, मैं ऐसा कुछ स्क्रिप्ट पहचानने की प्रतीत नहीं कर सकता जो ऐसा कर सकता है। इसका मतलब यह नहीं है कि यह वहां नहीं है। मैं अभी तक इसे नहीं देख सकता। -/each
:,, कीमत से पहले लोड किए जा रहे हैं, जिससे कि क्या अनुरोध वापस आ जाएगी है -()
इस मुद्दे के साथ पेज का एक विशिष्ट उदाहरण यूआरएल
https://www.homedepot.ca/en/home/p.dry-cloth-refills-32---count.1000660019.html
प्रारंभ में product-total-price
div तत्व पानी का छींटा शामिल है $11.29/each
के बजाय।
मेरे पास एक कामकाज है, लेकिन यह उतना कुशल या संक्षिप्त नहीं है जितना मैं चाहता हूं। मैं डैश की उपस्थिति के लिए लौटाई स्ट्रिंग का परीक्षण करता हूं। यदि यह वहां है, लूप और इसे फिर से जांचें, तो इसे कैप्चर करें और इसे वर्कशीट में डालें।
setPriceUM:
Set hdPriceUM = objIE.document.querySelector(".product-total-price").innerText
hdPriceUMString = hdPriceUM.innerText
stringTest = InStr(hdPriceUMString, "-")
If stringTest = True Then
GoTo setPriceUM
Else
Debug.Print hdPriceUMString
End If
इसे पढ़ने और इसे मानने के लिए समय निकालने के लिए धन्यवाद।
उत्कृष्ट प्रश्न। मैं इस मुद्दे के साथ भी संघर्ष करता हूं, लेकिन सौभाग्य से, जिस तरह से मैंने हमेशा अपनी समस्या हल की है, प्रारंभिक लूप के बाद एक लूप जोड़ रहा था जिसमें 'ऑब्जेक्ट' उपलब्ध था जब तक कि मेरी वस्तु उपलब्ध न हो जाए। तो, मेरा सवाल है: पृष्ठ के बाद पूरी तरह से "लोड" के बाद आपकी सभी वस्तुएं उपलब्ध हैं? उदाहरण: आप 'सबमिटबीटीएन = doc.getElement .....' सेट करें ... क्या वह 'कुछ भी नहीं' है, रनटाइम त्रुटि को संकेत देता है? –
मैं भी इस समस्या में भाग गया है, लेकिन यह आमतौर पर एक नेटवर्क समस्या है। जब नेटवर्क तेजी से चल रहा है, कोई समस्या नहीं है, लेकिन जब यह कुछ अंतराल समय दिखाना शुरू होता है, तो पेज पूरी तरह से लोड नहीं होते हैं। मुझे अतिरिक्त समय की अनुमति देने के लिए प्रतीक्षा टाइमर जोड़ने का सहारा लेना पड़ा। 'आवेदन। प्रतीक्षा करें (अब + टाइमवैल्यू ("0:00:06"))' यह 6 सेकंड का इंतजार है। – Mitch
@ मिच टाइमर अविश्वसनीय समाधान है, खासकर धीमी नेटवर्क के लिए। – omegastripes