すべての子要素を取得する


回答:


130

はい、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全体が再度検索されます
LukAron19年

61

はい、find_elements_by_子要素をリストに取得するために使用できます。ここでPythonバインディングを参照してください: ください 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.