2017-10-11 46 views
0

我只是處理一個簡單的腳本,該腳本通過房地產列表並收集代理個人網站。當我遇到代理沒有網站的列表時遇到問題,在這種情況下腳本停止工作。現在我已經嘗試了一下 - 除非運行except塊,否則在整個瀏覽器關閉時會發生這種情況。如何在嘗試運行除了塊以外的情況下解除方法

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) 

是否有無論如何我可以恢復回主頁,並在運行except塊時再次啓動循環?如果不是,循環像往常一樣運行?

+0

您的實際代碼是否與您提供的代碼具有相同的縮進? – Acccumulation

+0

不,它不會,我會修復那真正的快速@acccumulation – Dotpy

+0

'driver.close()'關閉整個瀏覽器,觸發'driver.quit()'。當你有不止一個去的時候,我沒有看到一個簡單的方法來關閉一個標籤頁/窗口。根據經驗,您希望避免切換窗口句柄。 – blakev

回答

0

在我看來,使用異常作爲邏輯流程並不是一個好的做法。例外情況應該是例外......他們應該指出何時發生意外錯誤。

取而代之,使用find_elements_*(複數)並檢查返回的集合是否爲空。如果不爲空,則表示鏈接存在,點擊它等。如果該集合爲空,則返回主頁並開始下一個循環。

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_elements_by_xpath('//*[@id="lblMediaLinks"]/a') 
    if (len(realtor_url)) > 0 
     realtor_url[0].click 
     WebDriverWait(driver, 10).until(lambda d: len(driver.window_handles) == 2) 
     driver.switch_to_window(driver.window_handles[1]) 
     driver.close() 
     driver.switch_to_window(driver.window_handles[0]) 
    driver.get(home_page) 

BTW,.click()仍然不返回任何如此分配其返回給一個變量永遠不會返回任何東西,但null所以我刪除該部分。

+0

令人驚歎的答案!我感謝你,我真的學到了一些新的有趣的:) @JeffC – Dotpy

+0

嘿@JeffC我在WebDriverWait上遇到超時錯誤,它也沒有點擊經銷商鏈接打印出來。它只需點擊列表,調出頁面並坐在那裏。 – Dotpy