2016-11-22 5 views
0

Ich bin in der Lage, die Daten mit dem Code unten zu filtern, aber der Export nach Excel funktioniert nicht. Ich ersuche Sie, wie Sie mein Schnipsel verbessern können, um Python anzuweisen, auf das vollständige Laden der Daten zu warten, und laden Sie dann die Excel-Datei in den gewünschten Ordner herunter.Wie kann man Python sagen, auf Selenium zu warten?

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 

driver = webdriver.Chrome("C:\Python27\Scripts\chromedriver.exe") 
driver.get("https://etrakit.friscotexas.gov/Search/permit.aspx") 

number_option = driver.find_element_by_id("cplMain_btnSearch") 
number_option.click() 

delay = 3 
try: 
    WebDriverWait(driver, delay).until(EC.presence_of_element_located(driver.find_element_by_id("cplMain_btnSearch"))) 
    print "Page is ready!" 
except TimeoutException: 
    print "Loading took too much time!" 


search_button = driver.find_element_by_id("cplMain_btnExportToExcel") 
search_button.click() 

options.add_argument("download.default_directory=C:\Users\Patrick\Desktop\Programming\R Files") 
driver = webdriver.Chrome(chrome_options=options) 

driver.close() 

Der Fehler:

Traceback (most recent call last): 
    File "C:\Users\Patrick\Desktop\Programming\aspxscraping.py", line 14, in <module> 
    WebDriverWait(driver, delay).until(EC.presence_of_element_located(driver.find_element_by_id("cplMain_btnSearch"))) 

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 a sequence, not WebElement 

Antwort

1

Versuchen Sie ersetzen diese

WebDriverWait(driver, delay).until(EC.presence_of_element_located(driver.find_element_by_id("cplMain_btnSearch")) 

mit diesem

from selenium.webdriver.common.by import By 

WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.ID, "cplMain_btnSearch"))) 
+0

Dank Anderson, die für den Code funktioniert. Jetzt zeigt es einen Fehler für Search.Button Traceback (jüngste Aufforderung zuletzt): Datei "C: \ Benutzer \ aqureshi \ Desktop \ Programming \ aspxscraping.py", Zeile 22, in search_button.click() –

+0

Fügen Sie der Frage und dem HTML-Code für die Suchschaltfläche das vollständige Ausnahmeprotokoll hinzu – Andersson

1

Ihr Problem ist hier:

Der Punkt des Wartens ist, das Element nicht selbst zu finden, weil es vielleicht noch nicht da ist! Es ist so, dass Sie es in diesem Fall gefunden haben und der Fehler sich über Ihre Verwendung von presence_of_element_located beschweren. Hier ist, was Sie tun müssen:

EC.presence_of_element_located((By.ID, "cplMain_btnSearch")) 

Lesen Sie die Dokumentation: http://selenium-python.readthedocs.io/waits.html#explicit-waits

Verwandte Themen