2017-01-31 7 views
0

Ich machte ein Programm, das einen Datensatz von Google Sheet-Prozess erhält, löscht es und so weiter. Wenn ich Google-Tabelle aktualisiere dann wird das Programm Rekord in der nächsten Schleife abziehen und Prozess auf sie und dann löschen, aber es läuft nur 1 oder 2 Stunden und dann gibt Programm einen Fehler:Wie kann ich verhindern, dass mein Selenium/Python-Programm abstürzt?

enter image description here

Was kann Ich füge in meinem Programm hinzu, damit mein Programm nie aufhört?

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
import time 
import traceback 
import string 
import gspread 
from oauth2client.service_account import ServiceAccountCredentials 
from selenium.common.exceptions import NoAlertPresentException 
from selenium.common.exceptions import UnexpectedAlertPresentException 


Email=raw_input('Please Enter your Email: ') 
password=raw_input('Please Enter Password: ') 


print("\n******Don't Interrupt the Script******") 
print('#script is Runing............\n') 



chrome_options = webdriver.ChromeOptions() #going to chrome options 
chrome_options.add_argument("--start-maximized") 
prefs = {"profile.default_content_setting_values.notifications" : 2 #turn off all notifications 
     ,"profile.managed_default_content_settings.images": 2} #disable images 
chrome_options.add_experimental_option("prefs",prefs) 
driver = webdriver.Chrome(chrome_options=chrome_options) # passing paramaters to chrome 

driver.get('https://accounts.google.com') 
time.sleep(3) 

#giving Email------------------- 
email = driver.find_element_by_id('Email') 
email.send_keys(Email, Keys.RETURN) 

#giving password---------------- 
time.sleep(3) 
email = driver.find_element_by_id('Passwd') 
email.send_keys(password, Keys.RETURN) 


#credentials + attach with googleSheet------------------------------ 
scope = ['https://spreadsheets.google.com/feeds'] 
credentials = ServiceAccountCredentials.from_json_keyfile_name('stephens-31d8490b5bd2.json', scope) 
google_sheet = gspread.authorize(credentials) 
workSheet = google_sheet.open("Video Access Master Sheet").worksheet("Sheet1") 



while True: 
    #fetch Records from Rows 2 to 50 and save on list----------------- 
    for i in range(2,51): 
     li_url=[] 
     li_email=[] 
     row=workSheet.row_values(i) 
     for b in row: 
      if 'youtu' in b: 
       li_url.append(b) 

       #find record which you append on list and then delete from googleSheet-------------------- 
       cell = workSheet.find(b) 
       row = cell.row 
       col = cell.col 
       workSheet.update_cell(row,col, '') 
       print 'Fetching Values From Row '+str(i)+'....' 
      elif '@' in b: 
       li_email.append(b) 
      elif b=='': 
       continue 
      else: 
       continue 

     #********************************************************* 
     #getting length list of li_url and apply condition on it----------------------------------------------- 
     length=len(li_url) 
     if length==0: 
      continue 
     else: 
      try: 
       #getting URLs from list and put into driver.get--------------------------------------------------------- 
       for a in li_url: 
        driver.get(a) 
        time.sleep(3) 
        driver.find_element_by_css_selector('.yt-uix-button-icon.yt-uix-button-icon-info.yt-sprite').click() 
        time.sleep(3) 
        driver.find_element_by_css_selector('.yt-uix-button.yt-uix-button-size-default.yt-uix-button-default.metadata-share-button').click() 
        time.sleep(2) 
        put_email=driver.find_element_by_css_selector('.yt-uix-form-input-textarea.metadata-share-contacts') 

        #getting emails from email list-------------------------------------------------------------- 
        put_email.send_keys(li_email[0]) 
        time.sleep(2) 
        driver.find_element_by_css_selector('.yt-uix-button.yt-uix-button-size-default.yt-uix-button-primary.sharing-dialog-button.sharing-dialog-ok').click() 
        time.sleep(4) 
        driver.find_element_by_xpath('.//*[@id="video-header"]/div/button[2]/span').click() 
        time.sleep(10) 

       #for notifications and alters-------------------------------------------- 
       try: 
        driver.switch_to.alert.accept() 
       except NoAlertPresentException: 
        pass 
       except UnexpectedAlertPresentException: 
        pass 
      except: 
       traceback.print_exc 
       pass 

     print 'Row '+str(i)+' Successfully Updated. \n' 
    time.sleep(120) #while loop sleep for 20minuts 

Dies ist der Fehler, den ich habe:

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    File "<string>", line 56, in parse 
    File "<string>", line 35, in parse 
cElementTree.ParseError: no element found: line 1, column 0 
+1

Ich denke, es zeigt einen Fehler, wenn es keine Aufzeichnung mehr gibt. Also was ich denke ist, dass Sie den leeren Datensatz überprüfen müssen. Wenn es keinen Datensatz gibt, dann hör auf. eine Art von Dingen – NarendraR

+0

Ich stimme zu. Der Fehler hat etwas damit zu tun, wie Sie nach Zeilen suchen. Warum versuchst du nicht 'wenn row_values ​​(i) None ist: continue' – Sai

+0

Schleife läuft alle 2min und überprüfe alle Zeilen .. –

Antwort

0

Aus irgendeinem Grund cell = workSheet.find(b) ausfällt. Könnte schlechte Daten drin sein; ohne die Eingabe zu sehen, ist es eine Vermutung.

Da Sie die Zeilennummer bereits kennen, können Sie die Verwendung von cell = workSheet.find(b) vermeiden, indem Sie einfach die gesuchten Spalten verfolgen und nach dem Kopieren der Daten schließlich workSheet.update_cell(i, col, '') aufrufen.

+0

ich denke nicht so .. weil meine Programme perfekt funktioniert fast 1 Stunde, aber danach gibt es Raise Fehler .. ich denke, etwas stimmt nicht mit Schleife .. die nicht kontinuierlich arbeiten .. aber ich weiß nicht wie Ich kann es lösen .. :( –

Verwandte Themen