我正在处理的代码段有问题。
def cmdPerm():
try:
Permission = ""
if Permission == "":
Permission = str(browser.find_element_by_xpath("/html/body/content/div/div[8]/div[2]/card[1]/content/div/p[1]/strong"))
if Permission == "":
Permission = str(browser.find_element_by_xpath("/html/body/content/div/div[8]/div[1]/card[1]/content/div/p"))
if Permission == "":
Permission = str(browser.find_element_by_xpath("/html/body/content/div/div[7]/div[2]/card[1]/content/div/p/strong"))
if Permission == "":
Permission = str(browser.find_element_by_xpath("/html/body/content/div/div[7]/div[2]/card[1]/content/div/p[1]/strong"))
if Permission != "":
fileAdd.write("\n" + Permission)
except:
unused = ""
finally:
unused = ""
问题在于此函数始终返回Exception。编译/运行时或类似的东西都没有错误,但是除了:无论我输入什么,总是会出错。我尝试将“权限”的值更改为“ ABC”。我知道这会阻止整个XPath发生,但是我代码中的最后一个IF语句应该可以工作。不,这不是我所需的任何其他导入,上面有更多代码遵循相同的模板,并且它们都可以工作。正是这个与我争论。
编辑:解释代码的全部内容,基本上是一个网络爬虫,它检查网站的某个部分以获取信息,如果在该部分上找不到任何内容,它将转到代码中提供的下一个Xpath,直到找到为止一。如果它无法在任何XPath中找到数据,它将除以下内容:并继续执行其余代码(这样做)。如果有任何XPath可以正常工作,它将不会检查其余XPath,而是将信息写入文件中。
亲切的问候,
答案 0 :(得分:0)
工作代码如下。是XPath停止了它的工作,我知道每次运行此脚本时,至少有4个XPath中的3个将无法运行,这就是为什么我用这种方式进行设置。但是问题是,如果第一个不起作用,它将抛出异常,因此停止了代码。我是Python的新手,所以我还有很多东西要学习。下面的代码按预期工作。感谢您的所有帮助!
def cmdPerm():
try:
Permission = ""
if Permission == "":
Permission = browser.find_element_by_xpath("/html/body/content/div/div[8]/div[2]/card[1]/content/div/p[1]/strong")
except:
try:
Permission = ""
if Permission == "":
Permission = browser.find_element_by_xpath("/html/body/content/div/div[8]/div[1]/card[1]/content/div/p")
except:
try:
Permission = ""
if Permission == "":
Permission = browser.find_element_by_xpath("/html/body/content/div/div[7]/div[2]/card[1]/content/div/p/strong")
except:
try:
Permission = ""
if Permission == "":
Permission = browser.find_element_by_xpath("/html/body/content/div/div[7]/div[2]/card[1]/content/div/p[1]/strong")
except:
unused = ""
finally:
Permission = str(Permission.text)
fileAdd.write("\n" + Permission)
答案 1 :(得分:0)
您可以将其简化为
def cmdPerm():
paths = [
"/html/body/content/div/div[8]/div[2]/card[1]/content/div/p[1]/strong",
"/html/body/content/div/div[8]/div[1]/card[1]/content/div/p",
"/html/body/content/div/div[7]/div[2]/card[1]/content/div/p/strong",
"/html/body/content/div/div[7]/div[2]/card[1]/content/div/p[1]/strong"
]
for p in paths:
try:
permission = browser.find_element_by_xpath(p)
fileAdd.write("\n" + permission)
break
except NoSuchElementException:
pass # Ignore the error and try the next path
else:
# Put code here to execute if none of the paths worked
pass
请注意已捕获的特定异常。您想忽略NoSuchElementException
以继续循环,但是您不准备对任何其他异常做任何明智的事情,因此请不要抓住它们。