모든 자식 요소 가져 오기


답변:


129

예, find_elements_by_css_selector("*")또는로 달성 할 수 있습니다 find_elements_by_xpath(".//*").

그러나 이것은 요소의 모든 자식 을 찾는 데 유효한 사용 사례처럼 들리지 않습니다 . 모든 직간접 적 자녀를 얻는 것은 비용이 많이 드는 작업입니다. 무엇을하려고하는지 자세히 설명해주십시오. 더 나은 방법이 있어야합니다.

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.stackoverflow.com")

header = driver.find_element_by_id("header")

# start from your target element, here for example, "header"
all_children_by_css = header.find_elements_by_css_selector("*")
all_children_by_xpath = header.find_elements_by_xpath(".//*")

print 'len(all_children_by_css): ' + str(len(all_children_by_css))
print 'len(all_children_by_xpath): ' + str(len(all_children_by_xpath))

2
단지는 것을 알아 내기 .전에 //점이없는 경우 중요합니다, 당신은 요소에서 메서드를 호출하는 경우에도, 다시 전체 HTML 검색
눅 아론

61

예,을 사용 find_elements_by_하여 하위 요소를 목록으로 검색 할 수 있습니다 . 여기에서 파이썬 바인딩을 참조하십시오. http://selenium-python.readthedocs.io/locating-elements.html

HTML 예 :

<ul class="bar">
    <li>one</li>
    <li>two</li>
    <li>three</li>
</ul>

다음 find_elements_by_과 같이 사용할 수 있습니다 .

parentElement = driver.find_element_by_class_name("bar")
elementList = parentElement.find_elements_by_tag_name("li")

특정 사례에 대한 도움이 필요한 경우 부모 및 자식 요소를 가져 오려는 HTML로 게시물을 편집 할 수 있습니다.


* find_element_by_class_name
Iorek

1

또 다른 존경심 find_elements_by_xpath(".//*")은 다음과 같습니다.

from selenium.webdriver.common.by import By


find_elements(By.XPATH, ".//*")

-2

다음은 자식 요소를 가져 오는 코드입니다 (Java에서).

String childTag = childElement.getTagName();
if(childTag.equals("html")) 
{
    return "/html[1]"+current;
}
WebElement parentElement = childElement.findElement(By.xpath("..")); 
List<WebElement> childrenElements = parentElement.findElements(By.xpath("*"));
int count = 0;
for(int i=0;i<childrenElements.size(); i++) 
{
    WebElement childrenElement = childrenElements.get(i);
    String childrenElementTag = childrenElement.getTagName();
    if(childTag.equals(childrenElementTag)) 
    {
        count++;
    }
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.