2017-07-04 6 views
1

i Frage gleiche Frage nicht in der Lage aufgrund geschrieben, es zu senden richtig bin ich wieder meine Frage veröffentlichen, ich habe einen Schaber mit Selen für die Website erstellt https://maharerait.mahaonline.gov.in/searchlist/searchlistSelen Web-Treiber Schaber

wenn ich dies führen Sie es durch jeden geht Drop-down und wenn es nützliche Daten findet in csv geschabt werden gibt es bestimmte Fehler:

Traceback (most recent call last): 
File "C:\Users\prince.bhatia\Desktop\maharera\Maha_Rera.py", line 66, in 
<module> 
    selectVillage.select_by_index(villageElement) 
    File 
"C:\Users\prince.bhatia\AppData\Local\Programs\Python\Python36\lib\site- 
packages\selenium\webdriver\support\select.py", line 103, in select_by_index 
raise NoSuchElementException("Could not locate element with index %d" % 
index) 
selenium.common.exceptions.NoSuchElementException: Message: Could not locate 
element with index 33 

Hier sind meine Codes:

from selenium import webdriver 
from selenium.webdriver.support.ui import Select 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 


import os 
import time 
import csv 
import sys 

driver = webdriver.Chrome("./chromedriver") 

driver.get('https://maharerait.mahaonline.gov.in/searchlist/searchlist') 

# try: 
#  element = WebDriverWait(driver, 100).until(
#   EC.presence_of_element_located((By.ID, "Promoter")) 
# ) 
# finally: 
#  print('0000000000000000000000') 
#  driver.quit() 

time.sleep(1) 

driver.find_element_by_id('Promoter').click() 

divisionLength = len(Select(driver.find_element_by_id('Division')).options) 
print('*********{}'.format(divisionLength)) 

firstRow = 0 
titleRow = [] 
contentRows = [] 

    for divisionElement in range(1,divisionLength): 
    selectDivision = Select(driver.find_element_by_id('Division')) 
    selectDivision.options 
selectDivision.select_by_index(divisionElement) 
time.sleep(1) 
districtLength = len(Select(driver.find_element_by_id('District')).options) 
while districtLength == 1: 
    pass 
print(districtLength) 
for districtElement in range(1,districtLength): 
    selectDistrict = Select(driver.find_element_by_id('District')) 
    selectDistrict.options 

    selectDistrict.select_by_index(districtElement) 

    time.sleep(1) 

    talukaLength = len(Select(driver.find_element_by_id('Taluka')).options) 
    print('/-----taluka numbers: {}-------/'.format(talukaLength)) 
    for talukaElement in range(1, talukaLength): 
     selectTaluka = Select(driver.find_element_by_id('Taluka')) 
     selectTaluka.options 
     selectTaluka.select_by_index(talukaElement) 
     time.sleep(1) 

     villageLength = len(Select(driver.find_element_by_id('Village')).options) 
     print('/-----village numbers: {}-------/'.format(talukaLength)) 
     for villageElement in range(1, villageLength): 
      selectVillage = Select(driver.find_element_by_id('Village')) 
      selectVillage.options 
      selectVillage.select_by_index(villageElement) 
      time.sleep(2) 
      projectLength = len(Select(driver.find_element_by_id('Project')).options) 

      print('/------------------------------/') 
      print('/-----project number: {}-------/'.format(projectLength)) 
      print('/------------------------------/') 
      if projectLength == 1: 
       continue 

      for projectElement in range(1,projectLength): 
       selectProject = Select(driver.find_element_by_id('Project')) 
       selectProject.options 

       while len(selectProject.options) == 1: 
        pass 
       # c = len(select.options) 
       # print('---------------{}'.format(c)) 

       # titleRow = [] 
       # contentRows = [] 
       # firstRow = 0 

       # for i in range(1,c): 
       #  select = Select(driver.find_element_by_id('Project')) 
       #  while len(select.options) == 1: 
       #   pass 
       time.sleep(1) 
       selectProject.select_by_index(projectElement) 

       driver.find_element_by_id('btnSearch').click() 
       tableRows = driver.find_element_by_class_name('table').find_elements_by_tag_name('tr') 

       if firstRow == 0: 
        headRow = tableRows[0].find_elements_by_tag_name('th') 
        for headRowData in range(0,len(headRow)): 
         text = headRow[headRowData].find_element_by_tag_name('span').text 
         titleRow.append(text) 
        firstRow = firstRow + 1 

       for dataRowsNumbers in range(1,len(tableRows)): 
        dataRow = tableRows[dataRowsNumbers].find_elements_by_tag_name('td') 
        tempList = [] 
        for dataRowContents in range(0,len(dataRow)): 
         try: 
          a_link = dataRow[dataRowContents].find_element_by_tag_name('a').get_attribute('href') 
          tempList.append(str(a_link)) 
         except: 
          tempList.append(str(dataRow[dataRowContents].text)) 
         # if dataRow[dataRowContents].text == 'View': 
         #  a_link = dataRow[dataRowContents].find_element_by_tag_name('a').get_attribute('href') 
         #  tempList.append(str(a_link)) 
         # else: 
         #  tempList.append(str(dataRow[dataRowContents].text)) 
         print(dataRow[dataRowContents].text) 
        print(tempList) 
        contentRows.append(tempList) 
# print('Automated check is over') 
# print('Stored data in programs is as below:') 
# print(contentRows) 
if sys.version_info[0] <= 2: 
    with open("./data.csv",'w') as csvfile: 
    csvfile = csv.writer(csvfile, delimiter=',') 
    csvfile.writerow(titleRow) 
    csvfile.writerow("") 
    for i in range(0,len(contentRows)): 
     csvfile.writerow(contentRows[i]) 
else: 
    with open("./data.csv",'w',newline='') as csvfile: 
     csvfile = csv.writer(csvfile, delimiter=',') 
     csvfile.writerow(titleRow) 
     csvfile.writerow("") 
     for i in range(0,len(contentRows)): 
     csvfile.writerow(contentRows[i]) 
driver.close() 

I Kann mir jemand sagen, wo ich falsch liege? Ich benutze Python 3.6 Ich habe die vorherige Frage geschlossen Ich musste 4 Leerzeichen hier geben, aber in Originalen sind gut geschrieben, außer dem Fehler.

Antwort

1

Ihre Fehlermeldung erscheint auf Zeile nach oben:

selectVillage.select_by_index(villageElement) 

Nach dem documentation:

This is done by examining the "index" attribute of an element, and not merely by counting.

Daher müssen Sie den Code ändern, um die Elemente zu durchlaufen, sich vielmehr, dass range(1,projectLength).

Update:

-this Laut, könnte die Lösung so einfach sein wie Ihr Bereich von 0 statt 1 starten:

for villageElement in range(0, villageLength - 1): 

Hinweis: Wenn das funktioniert, dann müssen Sie ändern der andere schlingt sich entsprechend.

+0

Gibt es noch mehr Hilfe, die ich erwarten kann? Wenn Sie mir helfen können, diesen Code zu ändern, da ich total verwirrt bin –

+0

DANKE SO VIEL SIR –

Verwandte Themen