2017-05-05 5 views
-2

Hallo, ich versuche ein Schrott alle Links von der Webseite. Und ich verwende Selen-Webdriver, um zu scrollen und klicken Sie auf mehr Schaltfläche in der Webseite laden. der Code, den ich versuche ist, wie unten gezeigt:Fehler beim Scrapfen von Links von der Webseite

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.common.exceptions import ElementNotVisibleException 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import NoSuchElementException 
from bs4 import BeautifulSoup 

def fetch_links(url): 
    chrome_path = r"D:\nishant_pc_d_drive\nishant_pc\d_drive\update_engine\myntra_update\chromedriver.exe" 
    driver = webdriver.Chrome(chrome_path) 
    driver.get(url) 

    while True: 
     try: 
      scrollcount=1 
      while scrollcount<5: 
       driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
       WebDriverWait(driver, 5) 
       scrollcount+=1 

      WebDriverWait(driver, 10).until(EC.presence_of_element_located(driver.find_elements_by_css_selector('.load_more .sbt-button, .load_more_order .sbt-button'))) 
      driver.find_element_by_id("loadmore").click() 
     except (ElementNotVisibleException,NoSuchElementException) as e: 
      print "done" 

    x = driver.page_source 
    soup2 = BeautifulSoup(x, 'html.parser') 
    linkcount=0 
    for each in soup2.find_all('a',attrs={"class":"thumb searchUrlClass"}): 
     print "https://www.shoppersstop.com/"+each.get('href') 
     linkcount+=1 
    print linkcount 

# thumb searchUrlClass 

fetch_links("https://www.shoppersstop.com/women-westernwear-tops-tees/c-A206020") 

aber leider ist es mir eine Fehlermeldung geben, wie unten dargestellt:

Traceback (most recent call last): 
    File "D:/INVENTORY/shopperstop/fetch_link.py", line 36, in <module> 
    fetch_links("https://www.shoppersstop.com/women-westernwear-tops-tees/c-A206020") 
    File "D:/INVENTORY/shopperstop/fetch_link.py", line 21, in fetch_links 
    WebDriverWait(driver, 10).until(EC.presence_of_element_located(driver.find_element_by_class_name('sbt-button'))) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\support\wait.py", line 71, in until 
    value = method(self._driver) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 63, in __call__ 
    return _find_element(driver, self.locator) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 328, in _find_element 
    return driver.find_element(*by) 
TypeError: find_element() argument after * must be an iterable, not WebElement 

, wie dieser Fehler zu entfernen. Vielen Dank!

+0

ist dies der gesamte Code? – Exprator

+0

kein Fehler ist wegen Selen. also gerade diesen Teil nur –

+0

hier gebucht ist kein Fehler. find_element() wo ist das Ding. der Fehler tritt dort auf – Exprator

Antwort

1
from selenium.webdriver.common.by import By 

element = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.ID, "myDynamicElement")) 
    ) 
+0

Nur Code-Antworten sind in SO nicht erlaubt. Bitte nehmen Sie sich eine Minute, um zusammenzufassen, was Ihr Code macht und wie er die Frage beantwortet. – JeffC

Verwandte Themen