Selenium,如何通过元素ID检查元素是否存在



网页可以包含id为"房屋信息"或"营销备注滚动"的元素,但不能同时包含这两个元素。我需要一个解决方案来验证哪个元素存在。然而,下面的代码并没有像我预期的那样运行。请咨询什么是正确的解决方案。

> if driver.find_element_by_id('house-info'):
>      marketing_info=driver.find_element_by_id('house-info').text
>  if driver.find_element_by_id('marketing-remarks-scroll'):
>      marketing_info+=driver.find_element_by_id('marketing-remarks-scroll').text
硒去除了4.3.0中的find_element_by_id()。请参阅变更:https://github.com/SeleniumHQ/selenium/blob/a4995e2c096239b42c373f26498a6c9bb4f2b3e7/py/CHANGES
Selenium 4.3.0
* Deprecated find_element_by_* and find_elements_by_* are now removed (#10712)
* Deprecated Opera support has been removed (#10630)
* Fully upgraded from python 2x to 3.7 syntax and features (#10647)
* Added a devtools version fallback mechanism to look for an older version when mismatch occurs (#10749)
* Better support for co-operative multi inheritance by utilising super() throughout
* Improved type hints throughout

您现在需要使用:

driver.find_element("id", ID)

在您的示例中,这些调用看起来是这样的:

driver.find_element('id', 'house-info')
driver.find_element('id', 'marketing-remarks-scroll')

为了提高可靠性,您应该考虑将WebDriverWaitelement_to_be_clickable结合使用。

代码中的另一个问题是,如果找不到元素,find_element()将引发Exception。(您在if语句中使用了它,但它不返回TrueFalse。(

尝试添加一个类似于这样的方法来使用if语句:

def is_element_visible(selector, by="css selector"):
try:
element = driver.find_element(by, selector)
if element.is_displayed():
return True
except Exception:
pass
return False

最新更新