You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium获取指定类_3GlyB下的图片?

Selenium 爬取图片:精准获取指定元素内的图片资源

问题场景

我正在用Selenium做网页爬取,需要收集名称和图片两类信息列表。目前已成功获取名称列表,代码如下:

### 点击右侧区域
browser.find_element("xpath","/html/body/div[1]/div/div/div[3]/div/div[2]/div[2]/div/div").click()

### 收集名称
nomes_ls_contatos = browser.find_elements(By.CLASS_NAME, "zoWT4")
len(nomes_ls_contatos) # 结果为21
nomes_ls_contatos[1].text

但获取图片时遇到问题:

  1. 最初通过标签名获取所有图片,会混入3张无关图片:
### 收集图片
fotos_ls_contatos = browser.find_elements(By.TAG_NAME, "img")
len(fotos_ls_contatos) # 结果为24
print(fotos_ls_contatos[1].get_attribute("src")) 
  1. 发现目标图片都在类名为_3GlyB的元素内,但直接获取该类元素后,.text返回空字符串,无法拿到图片信息:
fotos_ls_contatos = browser.find_elements(By.CLASS_NAME, "_3GlyB")
len(fotos_ls_contatos) # 结果为20
fotos_ls_contatos[1].text 

我需要实现类似browser.find_elements(By.CLASS_NAME, "_3GlyB").find_elements(By.TAG_NAME, "img")的嵌套查找逻辑,就像我用R语言实现的功能一样:

# 收集名称
nome_remetente <- lista_mensagens[[1]] |>
   rvest::read_html() |>
   rvest::html_elements("._3vPI2") |>
   rvest::html_elements(".zoWT4") |>
   rvest::html_element("span") |>
   rvest::html_text() |>
   as.data.frame() |>
   dplyr::rename(nome = 1) |>
   dplyr::filter(!is.na(nome))


# 收集图片
imagem_remetente <- lista_mensagens[[1]] |>
   rvest::read_html() |>
   rvest::html_elements("._1Oe6M") |>
   rvest::html_elements("._2EU3r") |>
   rvest::html_elements("._3GlyB") |>
   rvest::html_elements("img") |>
   rvest::html_attr("src") |>
   as.data.frame() |>
   dplyr::rename(imagem = 1)

解决方案

方法一:遍历容器元素嵌套查找

Selenium中find_elements返回的是元素列表,无法直接链式调用,但可以遍历每个_3GlyB容器,在内部查找图片:

# 获取所有目标容器
containers = browser.find_elements(By.CLASS_NAME, "_3GlyB")
# 遍历容器提取图片src
fotos_ls_contatos = []
for container in containers:
    img = container.find_element(By.TAG_NAME, "img")
    src = img.get_attribute("src")
    if src:
        fotos_ls_contatos.append(src)

# 查看结果
len(fotos_ls_contatos)
print(fotos_ls_contatos[1])

方法二:用CSS选择器直接定位

通过CSS选择器一步定位_3GlyB类下的img元素,无需遍历:

# 直接获取目标图片元素
fotos_ls_contatos = browser.find_elements(By.CSS_SELECTOR, "._3GlyB img")
# 提取所有有效src
src_list = [img.get_attribute("src") for img in fotos_ls_contatos if img.get_attribute("src")]

len(src_list)
print(src_list[1])

方法三:用XPATH定位

同样可以通过XPATH直接指定层级关系:

fotos_ls_contatos = browser.find_elements(By.XPATH, "//div[contains(@class, '_3GlyB')]/img")
src_list = [img.get_attribute("src") for img in fotos_ls_contatos if img.get_attribute("src")]

以上三种方法都能实现和R语言嵌套查找一致的逻辑,精准获取目标容器内的图片资源,避免无关图片混入。


内容的提问来源于stack exchange,提问作者RxT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:31:12