【问题标题】:get value by Xpath通过 Xpath 获取值
【发布时间】:2017-02-23 11:39:49
【问题描述】:

我正在尝试通过 Xpath 从我的 html 中检索一个值。 值得一提的是,这是一个 CRM 网络工具(Microsoft 的),它看起来像一个动态 iFrame,它会根据其栏上选择的链接(客户、上诉等...)而变化

<tbody><tr class="ms-crm-List-Row" oid="{665A4B9C-9658-E611-922C-441EA1745BC2}" otype="10046" otypename="new_contact_content">
			<td class="ms-crm-List-NonDataCell" align="center"><input type="checkbox" class="ms-crm-RowCheckBox" id="checkBox_{665A4B9C-9658-E611-922C-441EA1745BC2}" tabindex="0" title="A1" style=" "></td><td class="ms-crm-List-DataCell inner-grid-cellPadding"><nobr class="gridcellpadding"><a href="#" id="gridBodyTable_primaryField_{665A4B9C-9658-E611-922C-441EA1745BC2}_0" target="_self" title="A1" class="ms-crm-List-Link" tabindex="0">A1</a></nobr></td><td class="ms-crm-List-DataCell inner-grid-cellPadding ms-crm-NumbersAndDates"><nobr class="gridcellpadding">02/08/2016 12:50</nobr></td><td class="ms-crm-List-DataCell"><nobr class="gridcellpadding"></nobr></td>
		</tr><tr class="ms-crm-List-Row" oid="{675A4B9C-9658-E611-922C-441EA1745BC2}" otype="10046" otypename="new_contact_content">
			<td class="ms-crm-List-NonDataCell" align="center"><input type="checkbox" class="ms-crm-RowCheckBox" id="checkBox_{675A4B9C-9658-E611-922C-441EA1745BC2}" tabindex="0" title="A1.2" style=" "></td><td class="ms-crm-List-DataCell inner-grid-cellPadding"><nobr class="gridcellpadding"><a href="#" id="gridBodyTable_primaryField_{675A4B9C-9658-E611-922C-441EA1745BC2}_1" target="_self" title="A1.2" class="ms-crm-List-Link" tabindex="0">A2</a></nobr></td><td class="ms-crm-List-DataCell inner-grid-cellPadding ms-crm-NumbersAndDates"><nobr class="gridcellpadding">02/08/2016 12:50</nobr></td><td class="ms-crm-List-DataCell"><nobr class="gridcellpadding"></nobr></td>
		</tr><tr class="ms-crm-List-Row" oid="{6B5A4B9C-9658-E611-922C-441EA1745BC2}" otype="10046" otypename="new_contact_content">
			<td class="ms-crm-List-NonDataCell" align="center"><input type="checkbox" class="ms-crm-RowCheckBox" id="checkBox_{6B5A4B9C-9658-E611-922C-441EA1745BC2}" tabindex="0" title="A5" style=" "></td><td class="ms-crm-List-DataCell inner-grid-cellPadding"><nobr class="gridcellpadding"><a href="#" id="gridBodyTable_primaryField_{6B5A4B9C-9658-E611-922C-441EA1745BC2}_2" target="_self" title="A5" class="ms-crm-List-Link" tabindex="0">A5</a></nobr></td><td class="ms-crm-List-DataCell inner-grid-cellPadding ms-crm-NumbersAndDates"><nobr class="gridcellpadding">02/08/2016 12:50</nobr></td><td class="ms-crm-List-DataCell"><nobr class="gridcellpadding"></nobr></td>
		</tr><tr class="ms-crm-List-Row" oid="{6C5A4B9C-9658-E611-922C-441EA1745BC2}" otype="10046" otypename="new_contact_content">
			<td class="ms-crm-List-NonDataCell" align="center"><input type="checkbox" class="ms-crm-RowCheckBox" id="checkBox_{6C5A4B9C-9658-E611-922C-441EA1745BC2}" tabindex="0" title="A6" style=" "></td><td class="ms-crm-List-DataCell inner-grid-cellPadding"><nobr class="gridcellpadding"><a href="#" id="gridBodyTable_primaryField_{6C5A4B9C-9658-E611-922C-441EA1745BC2}_3" target="_self" title="A6" class="ms-crm-List-Link" tabindex="0">A6</a></nobr></td><td class="ms-crm-List-DataCell inner-grid-cellPadding ms-crm-NumbersAndDates"><nobr class="gridcellpadding">02/08/2016 12:50</nobr></td><td class="ms-crm-List-DataCell"><nobr class="gridcellpadding"></nobr></td>
		</tr><tr class="ms-crm-List-Row" oid="{6D5A4B9C-9658-E611-922C-441EA1745BC2}" otype="10046" otypename="new_contact_content">
			<td class="ms-crm-List-NonDataCell" align="center"><input type="checkbox" class="ms-crm-RowCheckBox" id="checkBox_{6D5A4B9C-9658-E611-922C-441EA1745BC2}" tabindex="0" title="A9" style=" "></td><td class="ms-crm-List-DataCell inner-grid-cellPadding"><nobr class="gridcellpadding"><a href="#" id="gridBodyTable_primaryField_{6D5A4B9C-9658-E611-922C-441EA1745BC2}_4" target="_self" title="A9" class="ms-crm-List-Link" tabindex="0">A9</a></nobr></td><td class="ms-crm-List-DataCell inner-grid-cellPadding ms-crm-NumbersAndDates"><nobr class="gridcellpadding">02/08/2016 12:50</nobr></td><td class="ms-crm-List-DataCell"><nobr class="gridcellpadding"></nobr></td>
		</tr></tbody>

我正在使用:

var nobrValues = _webdriverIE.FindElements(By.XPath("//nobr[@class='gridcellpadding']"));

但结果为 0。表示未找到对象。 我也试过:

var _tableOfInterestsCount = _webdriverIE.FindElements(By.XPath("//table[@id='gridBodyTable']/tbody/tr[1]/td"));
        var nobrvalues = var nobrValues = _tableOfInterestsCount.FindElements(By.XPath("//nobr[@class='gridcellpadding']"));

但同样,没有找到 nobr(计数为 0)。 基本上,我想从我的 html 中获取以下值中的一个(或全部):A1,A1.2,A5,A6,A9。

HTML 表格

<table class="ms-crm-List-Data" cellspacing="0" cellpadding="1" rules="rows" morerecords="0" totalrecordcount="3" allrecordscounted="1" oname="10046" numrecords="3" tabindex="0" primaryfieldname="new_name" summary="foo" border="1" id="gridBodyTable" style="border-style:None;border-collapse:collapse;">
		<colgroup><col width="18px" class="ms-crm-List-CheckBoxColumn"><col width="302" name="new_name" class="ms-crm-List-DataColumn ms-crm-List-SortedColumn"><col width="127" name="createdon" class="ms-crm-List-DataColumn"><col></colgroup><thead><tr class="ms-crm-Hidden-List"><th scope="col" class="ms-crm-Hidden-List"></th><th scope="col" class="ms-crm-Hidden-List">שם</th><th scope="col" class="ms-crm-Hidden-List">created at</th></tr></thead><tbody><tr class="ms-crm-List-Row" oid="{5843AB8E-39F7-E611-BE37-00155D47B163}" otype="10046" otypename="new_contact_content" selected="false">
			<td class="ms-crm-List-NonDataCell" align="center"><input type="checkbox" class="ms-crm-RowCheckBox" id="checkBox_{5843AB8E-39F7-E611-BE37-00155D47B163}" tabindex="0" title="1" style=" "></td><td class="ms-crm-List-DataCell inner-grid-cellPadding"><nobr class="gridcellpadding" title="name1"><a href="#" id="gridBodyTable_primaryField_{5843AB8E-39F7-E611-BE37-00155D47B163}_0" target="_self" title="name 1" class="ms-crm-List-Link" tabindex="0">A1</a></nobr></td><td class="ms-crm-List-DataCell inner-grid-cellPadding ms-crm-NumbersAndDates"><nobr class="gridcellpadding" title="20/02/2017 08:55">20/02/2017 08:55</nobr></td><td class="ms-crm-List-DataCell"><nobr class="gridcellpadding"></nobr></td>
		</tr><tr class="ms-crm-List-Row" oid="{5943AB8E-39F7-E611-BE37-00155D47B163}" otype="10046" otypename="new_contact_content" selected="false">
			<td class="ms-crm-List-NonDataCell" align="center"><input type="checkbox" class="ms-crm-RowCheckBox" id="checkBox_{5943AB8E-39F7-E611-BE37-00155D47B163}" tabindex="0" title="3" style=" "></td><td class="ms-crm-List-DataCell inner-grid-cellPadding"><nobr class="gridcellpadding" title="A5"><a href="#" id="gridBodyTable_primaryField_{5943AB8E-39F7-E611-BE37-00155D47B163}_1" target="_self" title="3" class="ms-crm-List-Link" tabindex="0">3</a></nobr></td><td class="ms-crm-List-DataCell inner-grid-cellPadding ms-crm-NumbersAndDates"><nobr class="gridcellpadding" title="20/02/2017 08:55">20/02/2017 08:55</nobr></td><td class="ms-crm-List-DataCell"><nobr class="gridcellpadding"></nobr></td>
		</tr><tr class="ms-crm-List-Row" oid="{5A43AB8E-39F7-E611-BE37-00155D47B163}" otype="10046" otypename="new_contact_content" selected="false">
			<td class="ms-crm-List-NonDataCell" align="center"><input type="checkbox" class="ms-crm-RowCheckBox" id="checkBox_{5A43AB8E-39F7-E611-BE37-00155D47B163}" tabindex="0" title="9" style=" "></td><td class="ms-crm-List-DataCell inner-grid-cellPadding"><nobr class="gridcellpadding" title="9"><a href="#" id="gridBodyTable_primaryField_{5A43AB8E-39F7-E611-BE37-00155D47B163}_2" target="_self" title="9" class="ms-crm-List-Link" tabindex="0">9</a></nobr></td><td class="ms-crm-List-DataCell inner-grid-cellPadding ms-crm-NumbersAndDates"><nobr class="gridcellpadding">20/02/2017 08:55</nobr></td><td class="ms-crm-List-DataCell"><nobr class="gridcellpadding"></nobr></td>
		</tr></tbody>
	</table>

【问题讨论】:

    标签: c# selenium xpath dynamics-crm


    【解决方案1】:

    为第一个元素 (A1) 尝试以下 XPATH:

     var nobrValues = _webdriverIE.FindElement(By.XPath("//tbody/tr[1]/td[2]/nobr/a"));
    

    或者

    如果您已经知道文本,即A1(静态内容)

    var nobrValues = _webdriverIE.FindElement(By.XPath("//nobr/a[text()='A1']"));
    

    对于A2

    var nobrValues = _webdriverIE.FindElement(By.XPath("//tbody/tr[2]/td[2]/nobr/a"));
    

    或者

    如果您已经知道文本,即A2(静态内容)

    var nobrValues = _webdriverIE.FindElement(By.XPath("//nobr/a[text()='A2']"));
    

    请分享table HTML 代码,以便我们可以使 XPATH 更加具体

    【讨论】:

    • 感谢您的详细解答。你的选项都没有成功。我对不是静态内容的选项有一个例外。我感觉我不在正确的页面上。另一方面,我可以识别出有 2 个 tr's(意思是两行),但无法获取其中的值。顺便说一句,这是一个 CRM(微软的网络工具)。
    • 你能发布异常跟踪吗?另外,检查表格是否在框架内。如果是,您可以在此处查看我的答案,了解有关切换黑白帧的更多详细信息stackoverflow.com/a/40759300/2575259
    【解决方案2】:

    在 xpath 下试试这些。

    获取A1

    的值

    解释:这里您的元素位于table 内。所以,用tr 标签开始xpath,然后用td 标签和nobr 标签继续前进。使用nobr 标记的class 属性并使用text 方法继续使用a 标记。

    //tr/td/nobr[@class='gridcellpadding']/a[contains(text(), 'A1')]
    

    获取3的值

    //tr/td/nobr[@class='gridcellpadding']/a[contains(text(), '3')]
    

    获取9的值

    //tr/td/nobr[@class='gridcellpadding']/a[contains(text(), '9')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2020-07-19
      相关资源
      最近更新 更多