首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python和Selenium:根据是否存在某些内容自动调整范围

Python和Selenium:根据是否存在某些内容自动调整范围
EN

Stack Overflow用户
提问于 2017-06-28 20:21:58
回答 3查看 75关注 0票数 0

Stackoverflow上的第一篇文章,这个网站过去对我非常有用,所以我想首先感谢社区。在过去的2-3周里,我一直在学习Python,仅仅是通过做我自己的小“项目”,我有一个问题,我试图搜索,但不是真的确定如何表达它,所以找到答案有点困难。

基本上,我想做的是采取用户输入的神奇宝贝,转到一个网站上有它的信息,并打印一个表,神奇宝贝可以学习通过升级的走法。我已经设法运行了一段代码,然而,我遇到的问题是,每个口袋妖怪学习不同数量的动作。我的代码是:

代码语言:javascript
复制
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非常陌生,所以代码可能不是最优雅的。

感谢您的阅读!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-28 20:28:19

while looptry except statement一起使用。因此,如果元素不存在,它只会停止循环。

代码语言:javascript
复制
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) 
票数 0
EN

Stack Overflow用户

发布于 2017-06-28 20:26:42

这里最简单的选择是添加try-except来传递错误,而不会中断循环:

代码语言:javascript
复制
...
(your code above)
while 1: #initially was for x in range(1,50), but while loop is better
    try:
        print(moves(x))
    except:
        break
票数 0
EN

Stack Overflow用户

发布于 2017-06-28 20:51:59

如果每次移动之间的区别在于<tr>标记,那么您可以定位所有这些元素的列表,并使用它来获取您正在查找的数据

代码语言:javascript
复制
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]))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44802291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档