2017-10-11 84 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