Try except in python/selenium still throwing NoSuchElementException error
我试图在python中使用selenium捕获一些网站元素,我正在使用try / except,以防在该特定页面中找不到特定元素。这一切都很好,但是脚本仍会抛出NoSuchElementException,即使我期待它并告诉脚本以某种方式处理它或通过它。
我唯一能想到的可能是一个问题就是这个try / except嵌套在另一个try / except中,所以我就是这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | for month in (month_start, month_end): for date in (date_start, date_end): try: #this is just a general try in case there is a breakdown in finding one of the elements driver.get(url) results = driver.find_elements_by_xpath("""//*[@class="results"]/div""") for result in results: sample_element = result.find_element_by_xpath("blah").text #seems to be where the problem starts specific_element ="" try: #this is a specific element that I know may not exist specific_element = result.find_element_by_xpath(""".//*[@class="specific"]/div""").text except NoSuchElementException: specific_element ="" #I have tried pass instead as well with no luck #throws an error here and won't continue if the specific element is not found except: #pretty much a copy of the above try with some changes |
所以我一般认为我对python中的try / except函数有一个很好的理解,但这是我的头脑。"结果结果"循环将很乐意继续,直到它找不到specific_element并且只抛出一个"selenium。 common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:"
如果嵌套在try / except中是整个问题的原因,请你解释为什么会这样,并推荐一个我可以研究或实现的可能的解决方案?或许我错过了一些基本的东西。
我不做python但如果是我,我会删除所有的try / catches并用
更换
1 | specific_element = result.find_element_by_xpath(""".//*[@class="specific"]/div""").text |
同
1 2 3 | elements = result.find_elements_by_xpath(".//*[@class='specific']/div") if elements specific_element = elements[0] |
这基本上只是确保在访问它之前找到任何元素,并且您可以避免所有尝试/捕获。我认为异常应该是特殊的......很少见。它们不应被期望或用作流量控制等。
你必须在这里处理几点:
-
try driver.get(url) 并非绝对必要 -
问题出在以下块中:
1
2try:
specific_element = result.find_element_by_xpath(""".//*[@class="specific"]/div""").text
分析
在
-
评估
1result.find_element_by_xpath(""".//*[@class="specific"]/div""") -
下一个
1result.find_element_by_xpath(""".//*[@class="specific"]/div""").text -
下一个
1specific_element = result.find_element_by_xpath(""".//*[@class="specific"]/div""").text
所以,
-
一旦
result.find_element_by_xpath(""".//*[@class="specific"]/div""") 失败但NoSuchElementException 被引发,try 仍然保持沉默。
解
一个简单的解决方案是:
1 2 3 4 5 6 7 8 | try: specific_element = result.find_element_by_xpath(""".//*[@class="specific"]/div""") specific_element_text = specific_element.text # other works except NoSuchElementException: specific_element ="" # other works |