【问题标题】:WebDriver - Python - How many elements in a tableWebDriver - Python - 表中有多少元素
【发布时间】:2015-03-02 23:03:27
【问题描述】:

我使用 Selenium 从表格 (TableExemple) 上的某些元素中获取文本:

 element1 = driver.find_element_by_xpath("//table[@id='TableExemple']/tbody/tr[2]/td").text
 element2 = driver.find_element_by_xpath("//table[@id='TableExemple']/tbody/tr[3]/td").text
 element3 = driver.find_element_by_xpath("//table[@id='TableExemple']/tbody/tr[4]/td").text
 element4 = driver.find_element_by_xpath("////table[@id='TableExemple']/tbody/tr[5]/td").text

在某些情况下,表格上只有 element1。

如何检查其他元素是否存在,避免出错?

可以计算表格中有多少元素(例如下拉菜单的 .options 属性:WebDriver - Python - How many elements in a drop-down menu)?

谢谢

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    您可以使用find_elements_by_xpath() 查找多个元素并在结果上调用len()

    cells = driver.find_elements_by_xpath("//table[@id='TableExemple']/tbody/tr[position() > 1]/td")
    print(len(cells))
    

    如何检查其他元素是否存在,避免出错?

    你可以看到NoSuchElementExceptionfind_element_by_xpath()抚养:

    from selenium.common.exceptions import NoSuchElementException
    
    try:
        element1 = driver.find_element_by_xpath("//table[@id='TableExemple']/tbody/tr[2]/td").text
        element2 = driver.find_element_by_xpath("//table[@id='TableExemple']/tbody/tr[3]/td").text
        element3 = driver.find_element_by_xpath("//table[@id='TableExemple']/tbody/tr[4]/td").text
        element4 = driver.find_element_by_xpath("//table[@id='TableExemple']/tbody/tr[5]/td").text
    except NoSuchElementException as e:
        print "Element Not Found", e
    

    【讨论】:

    • 非常完整的答案;它就像一个魅力!谢谢@alecxe
    【解决方案2】:

    我发现最好先执行以下操作:

    table_el = driver.find_elements_by_css('#TableExample')
    

    我喜欢css,仅次于ID。 find_elements 的这种使用在没有找到任何内容时不会引发异常(注意复数“元素”)然后使用返回的列表(可能为空)遍历“tr”元素:

    if len(table_el.find_elements_by_css('tr')) < 1:
        return False  # or something more useful
    trlist = list()
    for tr in table_el.find_elements_by_css('tr'):
        trlist.append(tr)
    

    【讨论】:

    • 我认为我们都非常有帮助! :)
    • 同意,为此 +1 :)
    • 很好地使用异常,尤其是不仅可以捕获泛型类型 'Exception' 还给你点赞。
    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多