我有一个for循环,可以遍历URL列表。然后由chrome驱动程序加载网址。某些网址会加载“错误”格式的页面,并且将在第一次xpath测试中失败。如果是这样,我希望它返回到循环中的下一个元素。我的清理代码有效,但似乎无法将其转到for循环中的下一个元素。我有一个例外,它关闭了我的web浏览器,但是我没有尝试过所有方法,然后让我全部循环回'for mysql_cats中的行'
for row in mysql_cats :
print ('Here is the url -', row[1])
cat_url=(row[1])
driver = webdriver.Chrome()
driver.get(cat_url); #Download the URL passed from mysql
try:
CategoryName= driver.find_element_by_xpath('//h1[@class="categoryL3"]|//h1[@class="categoryL4"]').text #finds either L3 or L4 catagory
except:
driver.close()
#this does close the webriver okay if it can't find the xpath, but not I cant get code here to get it to go to the next row in mysql_cats
答案 0 :(得分:2)
如果没有异常发生,我希望您也可以在此代码末尾关闭驱动程序。
如果要在引发异常时从循环的开头开始,则可以添加continue
,如其他答案所示:
try:
CategoryName=driver.find_element_by_xpath('//h1[@class="categoryL3"]|//h1[@class="categoryL4"]').text #finds either L3 or L4 catagory
except NoSuchElementException:
driver.close()
continue # jumps at the beginning of the for loop
由于我不知道您的代码,因此以下技巧可能没有用,但是处理这种情况的常用方法是使用try/except/finally
子句:
for row in mysql_cats :
print ('Here is the url -', row[1])
cat_url=(row[1])
driver = webdriver.Chrome()
driver.get(cat_url); #Download the URL passed from mysql
try:
# my code, with dangerous stuff
except NoSuchElementException:
# handling of 'NoSuchElementException'. no need to 'continue'
except SomeOtherUglyException:
# handling of 'SomeOtherUglyException'
finally: # Code that is ALWAYS executed, with or without exceptions
driver.close()
我还假设您每次都在创建新驱动程序是有原因的。如果不是自愿的,则可以使用以下方式:
driver = webdriver.Chrome()
for row in mysql_cats :
print ('Here is the url -', row[1])
cat_url=(row[1])
driver.get(cat_url); #Download the URL passed from mysql
try:
# my code, with dangerous stuff
except NoSuchElementException:
# handling of 'NoSuchElementException'. no need to 'continue'
except SomeOtherUglyException:
# handling of 'SomeOtherUglyException'
driver.close()
通过这种方式,您只有一个驱动程序来管理要在for
循环中尝试打开的所有页面
浏览somewhere,了解try/except/finally
在处理连接和驱动程序时如何真正有用。
作为一个脚注,我希望您注意到在代码中如何始终指定期望的异常:捕获所有异常can be dangerous。顺便说一句,如果您仅使用except:
答案 1 :(得分:-1)
添加继续到您的except语句。 Continue命令将您移至下一个循环。