2017-10-11 91 views
0

我只是做一個簡單的腳本,轉到房地產列表的網頁點擊列表上,打開代理網站,打印出網址,然後關閉頁面並返回返回列表頁面繼續下一個列表。我打了一堵牆,在一些列表中,代理沒有網站,所以我得到一個錯誤,說腳本找不到該元素,因爲它不是在那裏腳本停止。我怎麼能在for循環中使用if-else語句來關閉已打開的列表,而不需要代理網站,並返回到列表頁面以繼續檢查下一個列表?If Else statements for循環

這裏是循環:

time.sleep(15) 
for i in range(1,9): 
    listing_page = driver.find_element_by_xpath('//*[@id="m_property_lst_cnt_realtor_more_'+str(i)+'"]').click() 
    realtor_url = driver.find_element_by_xpath('//*[@id="lblMediaLinks"]/a').click() 
    WebDriverWait(driver, 10).until(lambda d: len(driver.window_handles) == 2) 
    driver.switch_to_window(driver.window_handles[1]) 
    WebDriverWait(driver, 10) 
    print(driver.current_url) 
    driver.close() 
    driver.switch_to_window(driver.window_handles[0]) 
    driver.get(home_page) 
    time.sleep(10) 

(PS,我知道睡眠()是不好的做法,我只是專注於基本的「如何能拿到劇本的工作」,而不是建設的更好的方法。 。一旦完成,我可以學習如何使它更好)

+0

我可能會使用一個嘗試 - 除了這裏 –

回答

0

而不是使用的if-else,你可以使用try-除外:

time.sleep(15) 
for i in range(1,9): 
    listing_page = driver.find_element_by_xpath('//*[@id="m_property_lst_cnt_realtor_more_'+str(i)+'"]').click() 
    try: 
     realtor_url = driver.find_element_by_xpath('//*[@id="lblMediaLinks"]/a').click() 
     WebDriverWait(driver, 10).until(lambda d: len(driver.window_handles) == 2) 
     driver.switch_to_window(driver.window_handles[1]) 
     WebDriverWait(driver, 10) 
    except: 
      print("Not found") 
      continue 
    driver.close() 
    driver.switch_to_window(driver.window_handles[0]) 
    driver.get(home_page) 
    time.sleep(10) 

而不是拋出一個錯誤,停止的,它應該跳過該部分代碼並按預期繼續。

+0

這樣做的問題是,除了運行它之外,它會關閉整個會話,因爲沒有代理網站被打開。所以,而不是運行在新打開的網頁上的driver.close(),它只是關閉一切。 – Dotpy

+0

@Dotpy在except之後嘗試使用'continue'。 '繼續'應該用下一個項目重啓循環,而不是突破它。我更新了我的代碼,讓我知道它的工作原理! – Brosta

+0

好吧,這樣的作品!但是,現在我必須將該頁面返回到home_page,但是如果我在上面插入driver.close(),它會停止循環LOL,現在我認爲這可能超出了此問題的範圍:P @Brosta – Dotpy

0

你可以只使用一個嘗試,除了在給出錯誤的代碼周圍。試試這個,看看它是否工作:

time.sleep(15) 
for i in range(1,9): 
    listing_page = driver.find_element_by_xpath('//*[@id="m_property_lst_cnt_realtor_more_'+str(i)+'"]').click() 

    try: 
     realtor_url = driver.find_element_by_xpath('//*[@id="lblMediaLinks"]/a').click() 
     WebDriverWait(driver, 10).until(lambda d: len(driver.window_handles) == 2) 
     driver.switch_to_window(driver.window_handles[1]) 
     WebDriverWait(driver, 10) 
     print(driver.current_url) 

    except: 
     print('No URL Found') 
    driver.close() 
    driver.switch_to_window(driver.window_handles[0]) 
    driver.get(home_page) 
    time.sleep(10) 
+0

這似乎工作,但除了執行時,它會關閉整個會話,而不是繼續到下一個清單。我該如何改變driver.close()這樣做? – Dotpy