Python和Selenium:根据是否存在某些内容自动调整范围
关于Stackoverflow的第一篇帖子,这个网站在过去对我非常有用,所以首先要感谢社区。在过去的2-3周里,我一直在学习Python,只是通过自己的小“项目”,我有一个问题,我试图搜索,但不确定如何表达,所以找到答案有点困难 基本上,我想做的是为一个神奇宝贝获取一个用户输入,去一个有相关信息的网站,打印一张神奇宝贝可以通过升级学习的动作表。我已经成功地运行了一段代码,但是,我遇到的问题是,每个神奇宝贝学习不同数量的动作。我的密码是:Python和Selenium:根据是否存在某些内容自动调整范围,python,list,selenium,range,Python,List,Selenium,Range,关于Stackoverflow的第一篇帖子,这个网站在过去对我非常有用,所以首先要感谢社区。在过去的2-3周里,我一直在学习Python,只是通过自己的小“项目”,我有一个问题,我试图搜索,但不确定如何表达,所以找到答案有点困难 基本上,我想做的是为一个神奇宝贝获取一个用户输入,去一个有相关信息的网站,打印一张神奇宝贝可以通过升级学习的动作表。我已经成功地运行了一段代码,但是,我遇到的问题是,每个神奇宝贝学习不同数量的动作。我的密码是: import selenium.webdriver as
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))
如果一个神奇宝贝只有15个移动,那么在x的第16次迭代中,会返回一个错误,因为xpath不存在,因此我正在寻找一种方法来修改我的代码,以便在xpath不存在时停止打印
我在考虑使用while True
语句,但不太确定如何处理它。同样,我对Python非常陌生,因此代码可能不是最优雅的
谢谢你的阅读 这里最简单的选项是添加
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
将
while循环
与try except语句一起使用
。因此,如果元素不存在,它只会停止循环
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)
如果每个移动之间的差异在
标记中,您可以找到所有这些元素的列表,并使用它来获取您要查找的数据
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]))
谢谢你,这在路上帮了我的忙!我仍然得到了一堆超出有效范围的“None”,但添加了一个if语句来解决这个问题:)乐意帮忙:)