Selenium - 从div类中获取所有子元素

0 人关注

我想获得包含在值为 "indigo-text descfont "的span类中的值,具体如下。

<div id="WineDetailContent"> event
 <span class="blue-text codefont">...</span>
 <span class="indigo-text descfont">Alsace</span>
 <span class="blue-text codefont">...</span>
 <span class="indigo-text descfont">2014</span>

因此,我得到阿尔萨斯2014. 我已经尝试使用以下方法。

details = driver.find_element_by_xpath("//div[starts-with(@id,'WineDetailContent')]")
res = details.find_element_by_xpath("//span[starts-with(@class,'indigo-text descfont')]")
print(res.text)

但它只返回第一个需要的值,即阿尔萨斯. How is it possible to get 2014也是如此?

python
html
css
selenium
web-scraping
SK_33
SK_33
发布于 2022-08-03
3 个回答
undetected Selenium
undetected Selenium
发布于 2022-09-11
0 人赞同

按照HTML的说法。

<div id="WineDetailContent">
    <span class="indigo-text descfont">Alsace</span>
    <span class="indigo-text descfont">2014</span>

这两个所需的文本都在其祖先<span class="indigo-text descfont">的后代<div id="WineDetailContent">内。

Solution

To print the texts from the <span class="indigo-text descfont">元素,你可以使用list comprehension并且你可以使用以下任何一种方法定位器战略:

  • Using CSS_SELECTOR:

    print([my_elem.text for my_elem in driver.find_elements(By.CSS_SELECTOR, "div#WineDetailContent span.indigo-text.descfont")])
    
  • Using XPATH:

    print([my_elem.text for my_elem in driver.find_elements(By.XPATH, "//div[@id='WineDetailContent']//span[@class='indigo-text descfont']")])
        
  • Curious koala
    Curious koala
    发布于 2022-09-11
    0 人赞同

    find_element_by_xpath return single WebElement. You need to use find_elements_by_xpath to select both elements:

    details = driver.find_element_by_xpath("//div[@id ='WineDetailContent']")
    res = details.find_elements_by_xpath("./span[@class = 'indigo-text descfont']")
    for i in res:
        print(i.text)
        
    Marcos
    Marcos
    发布于 2022-09-11
    0 人赞同

    我认为你在查找元素时少了一个(s),你需要使用find_elements。

    一般来说,当我们应用查找元素

    element.find_element_by_xxxx(selector)