Nhận tất cả các phần tử con


Câu trả lời:


123

Có, bạn có thể đạt được nó bằng find_elements_by_css_selector("*")hoặc find_elements_by_xpath(".//*").

Tuy nhiên, đây có vẻ không phải là một trường hợp sử dụng hợp lệ để tìm tất cả các phần tử con của một phần tử. Đó là một hoạt động tốn kém để có được tất cả trẻ em trực tiếp / gián tiếp. Vui lòng giải thích thêm những gì bạn đang cố gắng làm. Nên có một cách tốt hơn.

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
chỉ tìm ra rằng .trước khi //là quan trọng, nếu các dấu chấm là mất tích, ngay cả khi bạn đang gọi phương pháp này từ một yếu tố, lại một lần nữa tìm kiếm trên toàn bộ HTML
Luk Aron

61

Có, bạn có thể sử dụng find_elements_by_để truy xuất các phần tử con vào một danh sách. Xem các liên kết python tại đây: http://selenium-python.readthedocs.io/locating-elements.html

HTML mẫu:

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

Bạn có thể sử dụng find_elements_by_như vậy:

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

Nếu bạn muốn được trợ giúp về một trường hợp cụ thể, bạn có thể chỉnh sửa bài đăng của mình bằng HTML mà bạn đang tìm kiếm để lấy các phần tử cha mẹ và con cái.


* find_element_by_class_name
Iorek

1

Một sự tôn kính khác find_elements_by_xpath(".//*")là:

from selenium.webdriver.common.by import By


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

-1

Đây là một đoạn mã để lấy các phần tử con (Trong 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++;
    }
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.