2016-11-22 4 views
0

Я могу отфильтровать данные с помощью приведенного ниже кода, но Export to Excel не работает. Я прошу вашу любезную помощь о том, как улучшить мой фрагмент ниже, чтобы проинструктировать Python ждать, пока данные будут полностью загружены, а затем загрузите файл excel в нужную папку.Как сказать Python ждать Селена?

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() 

Ошибка:

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 

ответ

1

Попробуйте заменить этот

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

с этим

from selenium.webdriver.common.by import By 

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

Спасибо Андерсон, который работает для кода. Теперь он показывает ошибку для Search.Button TraceBack (самый последний вызов последним): Файл "C: \ Users \ aqureshi \ Desktop \ Программирование \ aspxscraping.py", строка 22, в search_button.click() –

+0

Добавьте полный журнал исключений к вашему вопросу и код «HTML» для кнопки поиска – Andersson

1

Ваша проблема здесь:

EC.presence_of_element_located(driver.find_element_by_id("cplMain_btnSearch")) 

Точка ожидания - не пытаться найти элемент самостоятельно, потому что его, возможно, еще нет! Так получилось, что вы нашли его в этом случае, и в этом случае ошибка в жалобах на использование вами presence_of_element_located. Вот что вам нужно сделать:

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

Смотрите документацию: http://selenium-python.readthedocs.io/waits.html#explicit-waits