首页 > 解决方案 > 如何从 Selenium 和 Python 提供的 HTML 中找到元素?

问题描述

实际上这个按钮位于容器内。请提供python的语法 这里这个属性有唯一的名字,但是不知道怎么用[data-control-name="job_search_category_suggestion_it"]

<button class="jobs-search-category-suggestions__button button-secondary-medium-muted mb2 mr2" data-control-name="job_search_category_suggestion_it" data-ember-action="" data-ember-action-8126="8126">
    <li-icon aria-hidden="true" type="search-icon" size="small"><svg viewBox="0 0 24 24" width="24px" height="24px" x="0" y="0" preserveAspectRatio="xMinYMin meet" class="artdeco-icon" focusable="false"><path d="M14,12.67L11.13,9.8A5,5,0,1,0,9.8,11.13L12.67,14ZM3.88,7A3.13,3.13,0,1,1,7,10.13,3.13,3.13,0,0,1,3.88,7Z" class="small-icon" style="fill-opacity: 1"></path></svg></li-icon>IT
  </button>

我使用了这段代码:

elem = driver.find_elements_by_xpath('//button[@data-control-name="job_search_category_suggestion_it]').click()

标签: pythonseleniumselenium-webdriverxpathwebdriver

解决方案


根据您共享的HTML,所需的元素是动态的,因此您需要诱导WebDriverWait使元素可点击,您可以使用以下解决方案:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='jobs-search-category-suggestions__button button-secondary-medium-muted mb2 mr2'][contains(.,'IT')]"))).click()

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

推荐阅读