2016-12-07 145 views
1

我試圖在名爲iens的網站上移動不同的頁面。我使用selenium + python來點擊「volgende」(意思是「下一個」在荷蘭),但我希望我的程序繼續點擊下一個,直到沒有更多的頁面使用while循環。所以在這種情況下,我希望我的程序在第23頁結束。現在,我可以通過關閉Cookie彈出消息,等待它關閉,然後單擊「Volgende」按鈕,進入第2頁。使用Python + Selenium在while循環中點擊下一頁

我的代碼如下所示:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 

chrome_path = '/Users/user/Downloads/chromedriver' 
driver = webdriver.Chrome(chrome_path) 
driver.get('https://www.iens.nl/restaurant+utrecht') 

#wait for cookie message 
close_icon = WebDriverWait(driver, 5, 
0.25).until(EC.visibility_of_element_located([By.CSS_SELECTOR, 
'.cookiePolicy-close'])) 

close_icon.click() 

#wait for cookie message to disappear 
WebDriverWait(driver, 5, 
0.25).until(EC.invisibility_of_element_located([By.CSS_SELECTOR, 
'.cookiePolicy-close'])) 

click_icon = WebDriverWait(driver, 5, 
0.25).until(EC.visibility_of_element_located([By.LINK_TEXT, 
'Volgende'])) 
click_icon.click() 

網站被稱爲提前https://www.iens.nl/restaurant+utrecht

謝謝!

回答

2

由於每次切換到下一頁時都會自動滾動,因此webdriver會嘗試單擊Next按鈕,但其他某個元素會收到點擊。您可以使用此解決方案:

while True: 
    try: 
     click_icon = WebDriverWait(driver, 5, 0.25).until(EC.visibility_of_element_located([By.LINK_TEXT, 'Volgende'])) 
     click_icon.click() 
     WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'main:not([style*="margin-top"])'))) 
    except: 
     break 

另一種簡單的解決方案(只如果你的目標是要達到最後一頁)是獲得最後一頁不點擊Next所有的時間:

driver.find_elements_by_xpath('//div[@class="pagination"]/ul/li/a')[-2].click()