2017-01-31 15 views
0

私はGoogleシートから1つのレコードを取得してそれを削除するなどのプログラムを作った。私はGoogleスプレッドシートを更新した場合、プログラムはそれを次のループと、プロセス内のレコードを控除し、その後、削除、 それだけで1時間または2時間を実行し、プログラムにはエラーを与える:Selenium/Pythonプログラムがクラッシュするのを防ぐには?

何ができる

enter image description here

自分のプログラムに追加して、プログラムが止まらないようにしますか?

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 

これは私が得たエラーです:cell = workSheet.find(b)に障害が発生したいくつかの理由について

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

これ以上レコードがなければエラーを表示すると思います。だから私はあなたが空のレコードをチェックする必要があると思います。レコードがない場合は停止します。何かのもの – NarendraR

+0

私は同意します。エラーは、行のチェック方法と関係があります。 – Sai

+0

ループが2分おきに実行され、すべての行がチェックされます.. –

答えて

0

。そこに不良データがある可能性があります。入力を見ることなく、それは誰の推測です。

すでに行番号がわかっているので、検索中の列を追跡し、最後にデータをコピーした後にworkSheet.update_cell(i, col, '')を呼び出すだけで、cell = workSheet.find(b)の使用を避けることができます。

+0

私のプログラムは完全にほぼ1時間働くので、これ以降はエラーが発生します。 私はループで何か問題があると思っています。私はそれを解決することができます.. :( –

関連する問題