2017-07-01 51 views
0

我正在爲網站Upwork寫一個刮碼,並且需要點擊每個頁面才能找到工作列表。這是我的Python代碼,我使用硒進行網絡爬行。爲什麼硒不能點擊「下一頁」直到結束?

from bs4 import BeautifulSoup 
import requests 
from os.path import basename 
from selenium import webdriver 
import time 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.common.by import By 

driver = webdriver.Chrome("./chromedriver") 
driver.get("https://www.upwork.com/o/jobs/browse/c/design-creative/") 


link = driver.find_element_by_link_text("Next") 
while EC.elementToBeClickable(By.linkText("Next")): 
    wait.until(EC.element_to_be_clickable((By.linkText, "Next"))) 
    link.click() 
+0

您需要提供更多的細節。它什麼時候停止工作?停止時會發生什麼? – Guy

回答

0

有兩個問題:

  1. EC有沒有屬性elementToBeClickable。在Python你應該使用element_to_be_clickable
  2. link僅在第一頁上的定義,因此使用它的第二頁上應該給你StaleElementReferenceException
  3. 。在你的代碼中沒有定義wait變量。我猜你的意思是這樣

    wait = WebDriverWait(driver, 10) 
    
  4. By有沒有屬性linkText。嘗試LINK_TEXT代替

嘗試使用下面的代碼來獲得所需的行爲

from selenium.common.exceptions import TimeoutException 
while True: 
    try: 
     wait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, Next"))).click() 
    except TimeoutException: 
     break 

這應該允許你點擊Next按鈕,而它的可用