获取<id>树下的所有属性? (Python selenium)

时间:2017-01-26 02:30:05

标签: python selenium-webdriver

我会直接跳到代码:

<ul id="SearchResultsDetails-MainContent" class="list unstyled SearchResultsBlock">
    <li id ="result_pdb5J55" class="row oneSearchResult"></li>
    <li id ="result_pdb5LUF" class="row oneSearchResult"></li>
    <li id ="result_pdb5B1J" class="row oneSearchResult"></li>
    < ... >

我已经设置了一个基本的for循环,如下所示:

 data=[]
 some_objects=driver.find_elements_by_id("SearchResultsDetails-MainContent")
 for objects in some_objects:
     datum=objects.find_element_by_class_name("row_oneSearchResult").get_attribute("id")
     data.append(datum)

我试图刮“result_pdb5J55”,“result_pdb5LUF”等。

然而,我遇到了很多困难。 IDE不会返回任何结果或返回NoSuchElementException。

3 个答案:

答案 0 :(得分:0)

标记中只有一个对象可能会找到以下语句,那就是<ul>对象。

id=some_objects=driver.find_elements_by_id("SearchResultsDetails-MainContent")

你需要做的是找到那个对象然后循环它的孩子。尝试以下几点:

data=[]
container_obj = driver.find_element_by_id("SearchResultsDetails-MainContent")
for child in container_obj.find_elements_by_tag_name("li"):
  data.append(child.get_attribute("id"))

答案 1 :(得分:0)

SearchResultsDetails-MainContent是单个父元素的id,列表是该元素的子元素。此外,孩子们有两个班级rowoneSearchResult,而不是row_oneSearchResult。你有几个选择

使用父选择器

找到子项
data=[]
some_objects = driver.find_elements_by_css_selector("#SearchResultsDetails-MainContent > .oneSearchResult")
for ob in some_objects:
    data.append(ob.get_attribute("id"))

找到父元素并使用它来定位子元素

data=[]
parent = driver.find_element_by_id("SearchResultsDetails-MainContent")
some_objects = parent.find_elements_by_class_name("oneSearchResult")
for ob in some_objects:
    data.append(ob.get_attribute("id"))

通过定位器找到孩子

data=[]
# by class oneSearchResult
some_objects = parent.find_elements_by_class_name("oneSearchResult")
#or by both classes
some_objects = parent.find_elements_by_css_selector(".row.oneSearchResult")
#or by partial id
some_objects = parent.find_elements_by_css_selector("[id*='result_pdb']")
for ob in some_objects:
    data.append(ob.get_attribute("id"))

答案 2 :(得分:0)

正如我观察到html标记下的<li> .class属性具有复合类,并且您正试图访问使用此find_element_by_class_name("row_oneSearchResult")的定位器不允许的那些。

只需将定位器更改为xpath selector,如{ - 1}},然后尝试

喜欢 -

find_element_by_xpath("//li[@class='row oneSearchResult']")