Stackoverflow上的第一篇文章,这个网站过去对我非常有用,所以我想首先感谢社区。在过去的2-3周里,我一直在学习Python,仅仅是通过做我自己的小“项目”,我有一个问题,我试图搜索,但不是真的确定如何表达它,所以找到答案有点困难。
基本上,我想做的是采取用户输入的神奇宝贝,转到一个网站上有它的信息,并打印一个表,神奇宝贝可以学习通过升级的走法。我已经设法运行了一段代码,然而,我遇到的问题是,每个口袋妖怪学习不同数量的动作。我的代码是:
import selenium.webdriver as webdriver
def moves(x):
move = browser.find_element_by_xpath("""//*[@id="svtabs_moves_15"]/div[1]/div[1]/div[1]/table/tbody/tr[""" + str(x) + """]/td[2]/a""").text
return(move)
poke = input("Search for which Pokémon?: ")
browser = webdriver.PhantomJS()
browser.get("https://pokemondb.net/pokedex/" + str(poke))
for x in range(1,50):
print(moves(x))如果一个Pokémon只有15步,那么在x的第16次迭代时,会返回一个错误,因为那个xpath不存在,所以我正在寻找一种方法来修改我的代码,这样如果xpath不存在,它就会停止打印。
我在考虑使用while True语句,但不太确定如何处理它。再说一次,我对Python非常陌生,所以代码可能不是最优雅的。
感谢您的阅读!
发布于 2017-06-28 20:28:19
将while loop与try except statement一起使用。因此,如果元素不存在,它只会停止循环。
def moves(x):
while True:
try:
move = browser.find_element_by_xpath("""//*[@id="svtabs_moves_15"]/div[1]/div[1]/div[1]/table/tbody/tr[""" + str(x) + """]/td[2]/a""").text
except:
break
return(move) 发布于 2017-06-28 20:26:42
这里最简单的选择是添加try-except来传递错误,而不会中断循环:
...
(your code above)
while 1: #initially was for x in range(1,50), but while loop is better
try:
print(moves(x))
except:
break发布于 2017-06-28 20:51:59
如果每次移动之间的区别在于<tr>标记,那么您可以定位所有这些元素的列表,并使用它来获取您正在查找的数据
def moves(element):
move = element.find_element_by_xpath('//*td[2]/a').text
return(move)
browser.get("https://pokemondb.net/pokedex/" + str(poke))
moves_list = browser.find_element_by_xpath("""//*[@id="svtabs_moves_15"]/div[1]/div[1]/div[1]/table/tbody/tr[""" + str(x) + """]""")
for x in range(1, len(moves_list)):
print(moves(moves_list[x]))https://stackoverflow.com/questions/44802291
复制相似问题