2017-06-06 101 views
0

我試着用硒滾動下來,但我使用webdriver PhantomJS。我嘗試硒測試JavaScript instagram。如你所知,在Instagram上有按鈕「加載更多」,點擊按鈕「加載更多」後,我們不必再次點擊,因爲它會自動刷新,它會顯示更多的圖像。Selenium PhantomJS向下滾動

我想是這樣的:

driver.find_element_by_xpath("//a[@class='_8ioip _glw1t']").click() 
time.sleep(5) 

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
time.sleep(3.6) 

其實這個代碼是工作,但沒有真正的工作,我的意思是在「time.sleep」奇怪的事情發生。如果我給2,結果很少,如果我給3結果只是非常多,但如果我給5,結果就像我給2。

問題是,如何使得滾動獲取所有數據

回答

1

「加載更多」按鈕的類似乎已經改變。 你的代碼是正確的,嘗試用這個XPath:

//a[@class='_8imhp _glz1g'] 

或嘗試找到按鈕通過它的文本內容:

//*/div/a[text()[contains(.,'Load more')]] 

之前點擊按鈕向下滾動..所以你的代碼應該看起來像:

driver.get('https://www.instagram.com/explore/tags/whatever/') 
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
driver.find_element_by_xpath("//*[text()[contains(.,'Load more')]]").click() 
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
+1

這是工作,但當我試圖循環它,爲什麼它不工作?你能幫我嗎 ?? 我試過這樣: '' ' 而真: driver.execute_script( 「window.scrollTo(0,document.body.scrollHeight);」) ''' 我把它點擊按鈕後負荷更多。 –

+0

您必須計算每次滾動後的帖子總數。當計數器穩定時,您可以打破while循環,因爲您將擁有我所做的所有帖子 –

+0

,我得到帖子的總數。我試圖循環的帖子總數。我用它來顯示帖子的總數。 ''' while True:driver.find_element_by_xpath(「// span [@class ='_ s53mj']/span [@ class ='_ bkw5z']」)。te xt.replace(',',' ')''' 而我試圖通過它循環,但仍然錯誤。 –