使用selenium python获取下一个html元素

2024-05-15 14:46:18 发布

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

我有下面的html正文,它给出了元素列表。请记住,此html仅用于演示。在实际的主体中,列表包含20多个属性

<dl>
   <dt class="sc-ellipsis">Merk</dt>
   <dd>
       <a href="https://www.autoscout24.nl/auto/audi/">Audi</a>
   </dd>
   <dt class="sc-ellipsis">Model</dt>
   <dd>
       <a href="/lst/audi/q3">Q3</a>
   </dd> ....more properties like that
</dl>

我想得到这样一句话:奥迪第三季度

我可以在Selenium中简单地做到这一点:

browser.find_elements_by_css_selector('dd')[0].text # to get Audi
browser.find_elements_by_css_selector('dd')[1].text # to get Q3

但是有时某些元素可能缺失,因此我不能依赖上述立场。例如,如果缺少奥迪,则:

browser.find_elements_by_css_selector('dd')[0].text # now it returns Q3

返回Q3。一种常见的模式是,奥迪将始终遵循MerkQ3将始终遵循车型。也就是说,如果Merk不在html正文中,那么Audi也不会。我试图找到Merk的下一个html元素:

WebDriverWait(browser, 10).until(EC.visibility_of_all_elements_located((By.XPATH, './/[(@class="sc-ellipsis") and (text()="Merk")]/following-sibling::dd')))[0].text

但是它返回一个空列表,这意味着它没有找到奥迪。有人知道如何获得Merk的下一个元素(或模型或列表中的下一个元素)吗? 我可以自己创建一个捕手,所以如果Merk不是列表的一部分,那么不要尝试获取下一个元素


Tags: textbrowser元素列表htmldtelementsfind
1条回答
网友
1楼 · 发布于 2024-05-15 14:46:18

以下代码将返回dt后面的dd文本,文本为“Merk”

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.autoscout24.nl/aanbod/audi-q3-sportback-pro-line-business-35-tfsi-110-kw-150-p-benzine-zilver-757ef256-c967-457b-8db1-4cb8b287c311?cldtidx=19')
elem = browser.find_element_by_xpath('//dt[text()="Merk"]/following-sibling::dd')
print(elem.text)

在检查代码之后,唯一的问题似乎是没有说明第一个标记的标记类型。使用通配符或dt

'.//*[(@class="sc-ellipsis") and (text()="Merk")]/following-sibling::dd'
'.//dt[(@class="sc-ellipsis") and (text()="Merk")]/following-sibling::dd'

相关问题 更多 >