2017-10-11 7 views
0

私は不動産のリストを経て、エージェント個人のウェブサイトを収集し、簡単なスクリプトに取り組んでいる方法を解任する方法。エージェントがウェブサイトを持っていないリスティングを見つけたときに問題に遭遇し、その場合スクリプトが機能しなくなりました。今はtry-exceptを入れました。これはexceptブロックが実行されるまで動作し、ブラウザ全体が終了すると動作します。ブロック以外で実行されたときの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

は、あなたの実際のコードは、あなたが提示したコードと同じインデントを持っていますか? – 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) 

ところで、.click()はまだので、私はその部分を削除した変数への復帰がnull以外のものを返すことはありません割り当てるので、何も返しません。

+0

アメージング答えの前に全体のブラウザを閉じずに開いているタブを閉じました!私はありがとう、私は実際には何か新しいと面白いことを実際に学んだ:) @ JeffC – Dotpy

+0

ちょっと@JeffC私はWebDriverWaitでタイムアウトエラーを取得している、それはまた、それらを印刷する不動産のリンクをクリックしていない。リスティングをクリックするだけで、ページが表示され、そこに座っています。 – Dotpy

関連する問題