我会直接跳到代码:
<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。
答案 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,列表是该元素的子元素。此外,孩子们有两个班级row
和oneSearchResult
,而不是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']")