我有下面的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。一种常见的模式是,奥迪将始终遵循Merk,Q3将始终遵循车型。也就是说,如果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不是列表的一部分,那么不要尝试获取下一个元素
以下代码将返回dt后面的dd文本,文本为“Merk”
在检查代码之后,唯一的问题似乎是没有说明第一个标记的标记类型。使用通配符或dt
相关问题 更多 >
编程相关推荐