Trong Selenium với Python, liệu có thể lấy tất cả các phần tử con của WebElement dưới dạng danh sách không?
Câu trả lời:
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))
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.
Đâ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++;
}
}
.
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