如果元素的Xpath正在更改,如何选择元素?

2024-10-02 18:16:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

<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,以及如何设置它以返回一个dict,其中NaN值作为键,以防内容不显示在页面上?你知道吗


Tags: divbox内容fields页面lih2ul
1条回答
网友
1楼 · 发布于 2024-10-02 18:16:17

您可以尝试避免在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"的块时,才允许刮取值

相关问题 更多 >