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