我写了一段代码来选择页面的一个元素(有一些产品的描述):
<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'中的内容,则表明该任务正确。 给出结果:
adresa = {'Sectorul': 'Botanica', 'Strada': 'бульвар Куза Водэ`, 'Numarul casei':'20/1'}
在这种情况下,它会选择页面上的其他内容:
adresa = ['079 104 207']
为什么这样haping以及如何将其设置为返回带有NaN
值的字典作为键,以防内容未显示在页面上?
答案 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"
的块时,才允许刮取值