如何在ID不断变化时通过XPath识别元素

时间:2015-06-10 17:10:14

标签: html xml xpath selenium-webdriver web-scraping

我正在使用一个网站,每次元素加载时,元素的值都会动态变化。 id是动态的,XPath也是动态的。我似乎没有任何唯一的标识符来定位元素。请告知每次页面加载时唯一标识元素的最佳方法。

以下是第一次加载页面时XPath的示例:

.//*[@id='isc_HY']/table/tbody/tr/td

当我进行另一次运行时,相同的元素如下:

.//*[@id='isc_IP']/table/tbody/tr/td    

页面上还有其他几个与上述元素类似的元素。

例如,有一个我不需要的具有以下XPath的元素:

.//*[@id='isc_I2']/table/tbody/tr/td

以下是相同的HTML信息:

<div id="isc_HY" style="position: relative; display: inline-block; box-sizing: border-box; width: 100%; vertical-align: top; visibility: inherit; z-index: 204195; cursor: pointer;" eventproxy="isc_OBTabBarButtonChild_9">
 <table width="68px" height="38px" cellspacing="0" cellpadding="0">
 <tbody>
 <tr>
 <td class="OBTabBarButtonChildTitleOver" valign="center" nowrap="true" align="right" onfocus="isc_OBTabBarButtonChild_9_label.$47()" tabindex="-1">Item Pricing</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="isc_I0" class="OBTabBarButtonChildTopOver" onscroll="return isc_OBTabBarButtonChild_9.$lh()" style="position: absolute; left: 208px; top: 0px; width: 96px; height: 38px; z-index: 204194; box-sizing: border-box; overflow: hidden; cursor: pointer; outline-style: none;" tabindex="4914" onblur="if(window.isc)isc.EH.blurFocusCanvas(isc_OBTabBarButtonChild_9,true);" onfocus="if(event.target!=this)return;isc.EH.focusInCanvas(isc_OBTabBarButtonChild_9,true);" role="tab" eventproxy="isc_OBTabBarButtonChild_9">
<div id="isc_I1" onscroll="return isc_OBTabBarButtonChild_10.$lh()" style="position: absolute; left: 319px; top: 0px; width: 59px; height: 38px; z-index: 204213; box-sizing: border-box; overflow: hidden; cursor: pointer; outline-style: none;" tabindex="-1" onblur="if(window.isc)isc.EH.blurFocusCanvas(isc_OBTabBarButtonChild_10_label,true);" onfocus="if(event.target!=this)return;isc.EH.focusInCanvas(isc_OBTabBarButtonChild_10_label,true);" role="label" eventproxy="isc_OBTabBarButtonChild_10">

我希望点击“商品定价”文字。

1 个答案:

答案 0 :(得分:0)

您可以通过以下XPath选择其内容等于字符串的表格单元格,例如“项目定价”:

python manage.py test --settings=equity_funds.settings