2012-11-28 8 views
9

का उपयोग कर वेब पेज को स्क्रॉल करने का तरीका मैं पृष्ठ पर स्क्रॉल होने पर आलसी लोड होने वाली सामग्री को खोजने और क्लिक करने के लिए एक वेब पेज स्क्रॉल करने का प्रयास कर रहा हूं। मैं निम्न आदेश का उपयोग कर रहावॉटर

require 'watir-webdriver' 

@browser = Watir::new :firefox 
@browser.send_keys :space 

मैं फ़ायरफ़ॉक्स के साथ वेब चालक उपयोग कर रहा हूँ और मैं ubuntu पर हूँ, लेकिन यह काम नहीं कर है। निम्न रूबी कोड में मैं पृष्ठ को तब तक स्क्रॉल करने की कोशिश कर रहा हूं जब तक कि मुझे तत्व नहीं मिला: आईडी। तत्व आलसी लोड हो रहा है। मुझे कुछ सेकंड के बाद टाइमआउट मिल रहा है, किसी भी विचार को निम्नलिखित कोड में क्या गलत है।

When /^deal (\d+) is loaded$/ do |id| 
    (0..5).each do |click|  
    @browser.send_keys :space 
    end 
end 

watir चालक का उपयोग कर एक पेज स्क्रॉल करने के लिए सबसे अच्छा तरीका क्या है?

उत्तर

16

यदि आपके पास जावास्क्रिप्ट सक्षम है, तो आप अंतर्निहित ड्राइवर तक पहुंच सकते हैं और पृष्ठ पर स्क्रॉल करने के लिए कुछ जावास्क्रिप्ट निष्पादित कर सकते हैं।

@browser.driver.executeScript("window.scrollBy(0,200)") 

वाई अक्ष के साथ पृष्ठ 200 पिक्सेल नीचे स्क्रॉल करेगा।

विधि के प्रलेखन के लिए यहां देखें:

http://www.w3schools.com/jsref/met_win_scrollby.asp

+9

ध्यान दें कि आप स्क्रिप्ट निष्पादित करने के लिए ड्राइवर का उपयोग करने की जरूरत नहीं है।आप बस कर सकते हैं: 'browser.execute_script (" window.scrollBy (0,200) ")'। –

2

खेद है कि मैं पिछले जवाब पर टिप्पणी नहीं कर सकता है के बाद से मैं यहाँ नया हूँ और अभी तक पर्याप्त प्रतिनिधि अंक भी नहीं है तो मैं बस एक नया उत्तर बनाया । वैसे भी, अगर कोई स्क्रॉल के साथ मुद्दों कर रहा है कई बार यह कोशिश (एक पाश और नींद जोड़ने):

maximum_times_needed = max # of times you need the page to scroll down 

maximum_times_needed.each do 
@browser.driver.executeScript("window.scrollBy(0,200)") 
sleep 0.15 
end 

0.15 कितना समय लोड करने के लिए पेज लेता है के आधार पर भिन्न हो सकती है। 0.15 0.15 सेकेंड है इसलिए पेज लोड होने के लिए पर्याप्त समय की अनुमति देने के लिए आवश्यकतानुसार समायोजित करें। 200 को एक बड़ी पिक्सेल राशि में समायोजित करने की भी आवश्यकता हो सकती है।

+0

क्यों 'wait_until {block} 'क्यों नहीं? हार्डकोडेड प्रतीक्षा विधियों = परेशान – meatspace

2

मैं इस के साथ मेरी सहायता करने के लिए "वॉटर-स्क्रोल" नामक एक मणि का उपयोग करता हूं। हालांकि इसे आमतौर पर स्क्रॉल करने के लिए स्थानों की आवश्यकता होती है, लेकिन यह निर्देशांक तक स्क्रॉल भी करेगा।

https://github.com/p0deje/watir-scroll 

आप या तो किसी विशिष्ट तत्व

button1 = @browser.input(:class => "mileage_rate") 
@browser.scroll.to button1 

या सिर्फ शीर्ष मध्य या केंद्र

@browser.scroll.to :top 
@browser.scroll.to :center 
@browser.scroll.to :bottom 

या एक करने के लिए स्क्रॉल करने के लिए स्क्रॉल करने के लिए स्क्रॉल कर सकते हैं समन्वय

browser.scroll.to [0, 200] 
+2

यह # <वॉटर :: ब्राउज़र: 0x314d858> (NoMethodError) ' – paul

+0

@paul - के लिए 'अपरिभाषित विधि स्क्रॉल देता है। मैं रूबी 1.8.7, वॉटर 1.6.7, वॉटर-वेबड्राइवर 0.6.2 का उपयोग कर रहा हूं – stack1

0

यह मुझे समय का एक गुच्छा बचाया ई:

browser.div(:id => 'start-date-holder').wd.location_once_scrolled_into_view 
0

आप अंतर्निहित ड्राइवर तक पहुंच सकते हैं और कुछ जावास्क्रिप्ट निष्पादित कर सकते हैं। उदाहरण के लिए यदि आप पृष्ठ के नीचे स्क्रॉल करना चाहता था आप

@browser.driver.execute_script("window.scrollBy(0,document.body.scrollHeight)") 

जो y- अक्ष पर पृष्ठ के नीचे तक स्क्रॉल का प्रयोग करेंगे।

0

यह काम करता है

evaluate_script("document.getElementsByTagName('body')[0].scrollTop=0;") 
संबंधित मुद्दे