如何通过Selenium Python单击表中的元素

时间:2019-01-31 10:31:44

标签: python selenium xpath css-selectors webdriver

我想单击表ID“ ContractDesc”,“ EEE”内容中的单元格:

HTML页面:

<table cellpadding="0" cellspacing="0" border="0" class="tablelist" id="table1" style="width: 80%; margin: 0px 0px 0px 0px;">
    <thead>
        <tr>
            <th style="width: 30%">
                AAA
            </th>
            <th>
                BBB
            </th>
            <th style="width: 40%">
                CCC
            </th>
        </tr>
    </thead><tbody>


    <tr id="1" onmouseout="fnMouseOut(1)" =="" ""="" onmouseover="fnMouseOver(1)" onclick="selectRow(this)" style="cursor: pointer; background-color: rgb(248, 248, 248);" projectid="111111">
        <td align="center" name="contno">
            DDD
        </td>
        <td name="ContractDesc">
            EEE
        </td>
        <td name="">
            FFF
        </td>
    </tr>

</tbody>
</table>

我的代码不起作用:

driver.find_element_by_xpath('//*[@id="1"]/td[2]').click()

driver.find_element_by_name("ContractDesc").click()

错误是:

  

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ // * [@ id =” 1“] / td [ 2]“}

3 个答案:

答案 0 :(得分:0)

尝试此XPath:

driver.find_element_by_xpath("//td[@name='ContractDesc']").click()

请检查该元素是否在iframe中,如果是,则需要使用以下命令将驱动程序切换到iframe:WebElement iFrame= driver.findElement(By.tagName("iframe"));然后driver.switchTo().frame(iFrame);,然后单击给定xpath,如果您想切换到默认上下文,则可以使用driver.switchTo().defaultContent();

答案 1 :(得分:0)

您可以使用下面的xpath通过名称和文本进行选择,normalize-space删除所有空格:

//td[@name='ContractDesc' and normalize-space(.)='EEE']

答案 2 :(得分:0)

对于文本为 EEE 的元素,click()可以使用以下任一解决方案:

  • 使用CSS_SELECTOR

    driver.find_element_by_css_selector("table.tablelist#table1 tr#1 td[name='ContractDesc']").click()
    
  • 使用XPATH

    driver.find_element_by_xpath("//table[@class='tablelist' and @id='table1']//tr[@id='1']//td[@name='ContractDesc' and normalize-space()='EEE']").click()