如何在try-except中运行除块之外的方法

时间:2017-10-11 21:15:08

标签: python selenium

我正在编写一个简单的脚本,通过房地产列表并收集代理个人网站。当我遇到一个代理没有网站的列表时,我遇到了一个问题。在这种情况下,脚本停止工作。现在我已经尝试了 - 除了在运行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块时再次启动循环?然后,如果不是;循环像往常一样运行?

1 个答案:

答案 0 :(得分: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以外的任何内容,因此我删除了该部分。