如果Xpath正在改变,如何选择一个元素?

时间:2017-03-04 18:51:04

标签: python html selenium xpath

我写了一段代码来选择页面的一个元素(有一些产品的描述):

 <h2 class="box-header dgrey mt30">
            Amplasare        </h2>
        <ul class="itemtable box-columns">
            
				<li>
					<div class="fields">Strada</div>
					<div class="values">бульвар Куза-Водэ </div>
				</li>
				<li>
					<div class="fields">Numărul casei</div>
					<div class="values">20/1 </div>
				</li>
				            <ul class="itemtable">
					            <li>
						            <div class="fields">Sectorul</div>
						            <div class="values">Botanica</div>
					            </li>
				            </ul>        </ul>

try:
    adresa = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="anItemData"]/ul[4]')))
    adresa = adresa.text
    adresa = adresa.split('\n')
    adresa = {k:v for k, v in zip(adresa[0::2],adresa[1::2])}
except TimeoutException:
    adresa = 1

如果它找到行'Amplasare'中的内容,则表明该任务正确。 enter image description here 给出结果:

adresa = {'Sectorul': 'Botanica', 'Strada': 'бульвар Куза Водэ`, 'Numarul casei':'20/1'}

但有时用户没有完成所有字段并且缺少内容: enter image description here

在这种情况下,它会选择页面上的其他内容: adresa = ['079 104 207'] 为什么这样haping以及如何将其设置为返回带有NaN值的字典作为键,以防内容未显示在页面上?

1 个答案:

答案 0 :(得分:0)

您可以尝试避免在XPath中使用索引,但使用精确文本绑定到元素:

try:
    adresa = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//h2[normalize-space(text())="Amplasare"]/following-sibling::ul')))
    adresa = adresa.text
    adresa = adresa.split('\n')
    adresa = {k:v for k, v in zip(adresa[0::2],adresa[1::2])}
except TimeoutException:
    adresa = 1

仅当在页面

上找到带有标题"Amplasare"的块时,才允许刮取值