2017-07-01 1 views
0

J'écris un code de grattage pour le site Upwork, et j'ai besoin de cliquer sur chaque page pour les offres d'emploi. Voici mon code python, que j'ai utilisé sélenium pour crawl web.Pourquoi ce sélénium ne clique pas sur "page suivante" jusqu'à la fin?

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

Vous devez donner plus de détails. Quand cela arrête-t-il de fonctionner? que se passe-t-il quand ça s'arrête? – Guy

Répondre

0

Il y a deux problèmes:

  1. EC n'a pas d'attribut elementToBeClickable. Dans Python vous devez utiliser element_to_be_clickable
  2. Votre link défini sur la première page, afin de l'utiliser sur la deuxième page devrait vous donner StaleElementReferenceException
  3. Il n'y a pas de variable wait définie dans votre code. Je suppose que vous voulez dire quelque chose comme

    wait = WebDriverWait(driver, 10) 
    
  4. By n'a pas d'attribut linkText. Essayez LINK_TEXT à la place

Essayez d'utiliser ci-dessous le code pour obtenir un comportement nécessaire

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 

Cela devrait vous permettre de cliquer sur le bouton Next alors qu'il est disponible