简体   繁体   English

无法使用硒定位元素列表

[英]Unable to locate an lists of elements using selenium

I need to scrape some pages.我需要一些页面。 The exact structure of the part that I want is as follows:我想要的部分的确切结构如下:

<div class="someclasses">
<h3>...</h3> # Not needed
<ul class="ul-class1 ul-class2">
<li id="li1-id" class="li-class1 li-class2">
<div id ="div1-id" class="div-class1 div-class2 ... div-class6">
<div class="div2-class">
    <div class="div3-class">...</div> #Not needed
    <div class="div4-class1 div4-class2 div4-class3">
        <a href="href1" data-control-id="id1" data-control-name="name" id ="a1-id" class="a-class1 a-class2">
            <h3 class="h3-class1 h3-class2 h3-class3">Text1</h3>
        </a></div>
    <div>...</div> # Not needed
</div>
</li>
<li id="li2-id" class="li-class1 li-class2">
<div id ="div2-id" class="div-class1 div-class2 ... div-class6">
<div class="div2-class">
    <div class="div3-class">...</div> #Not needed
    <div class="div4-class1 div4-class2 div4-class3">
        <a href="href2" data-control-id="id2" data-control-name="name" id ="a2-id" class="a-class1 a-class2">
            <h3 class="h3-class1 h3-class2 h3-class3">Text2</h3>
        </a></div>
    <div>...</div> # Not needed
</div>
</li>
# More <li> elements
</ul>
</div>

Now what I want is to get the Texts as well as the hrefs .I have used the naming in above example exactly realistic ie the same names are also the same in the real webpage.现在我想要的是获得Texts以及hrefs 。我在上面的例子中使用了完全真实的命名,即真实网页中的相同名称也是相同的。 The code that I am currently using is:我目前使用的代码是:

elems = driver.find_elements_by_xpath("//div[@class='someclasses']/ul[@class='ul-class1']/li[@class='li-class1']")
print(len(elems))
for elem in elems:
    elem1 = driver.find_element_by_xpath("./a[@data-control-name='name']")
    names2.append(elem1.text)
    print(elem1.text)
    hrefs.append(elem.get_attribute("href"))

The result of the print statement above is 0 so basically the elements are not found.上面的print语句的结果是0所以基本上找不到元素。 Can anyone please tell me what am I doing wrong.谁能告诉我我做错了什么。

You are using only part of the class name... in XPATH you need the full class name...您只使用了类名的一部分……在 XPATH 中,您需要完整的类名……

FYI: With CSS you can use part of the class name...仅供参考:使用 CSS,您可以使用部分类名...

If you want to use XPATH try:如果您想使用 XPATH,请尝试:

elems = driver.find_elements_by_xpath("//div[@class='someclasses']//li//a")
print(len(elems))
for elem in elems:

    names2.append(elem.text)
    print(elem.text)
    new_href = elem.get_attribute("href")
    print(new_href)
    hrefs.append(new_href)

For CSS use: div.someclasses ul.ul-class1对于 CSS 使用: div.someclasses ul.ul-class1

elems = driver.find_elements_by_css_selector("div.someclasses ul.ul-class1 li a")
for elem in elems:
    names2.append(elem.text)
    print(elem.text)
    new_href = elem.get_attribute("href")
    print(new_href)
    hrefs.append(new_href)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM