selenium 如何在特定类中查找图像?

qv7cva1a  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(99)

我一直在尝试使用Selenium做一个网页抓取。
我需要下载两个信息列表:名字和照片。
我用这个代码下载了名单:

### click on right div
browser.find_element("xpath","/html/body/div[1]/div/div/div[3]/div/div[2]/div[2]/div/div").click()

### colect names
nomes_ls_contatos = browser.find_elements(By.CLASS_NAME, "zoWT4")
len(nomes_ls_contatos) # 21
nomes_ls_contatos[1].text

为了下载图片,我尝试:

### collect pictures
fotos_ls_contatos = browser.find_elements(By.TAG_NAME, "img")
len(fotos_ls_contatos) # 24
print(fotos_ls_contatos[1].get_attribute("src"))

但这样一来,它下载了三张我不需要的照片。
我发现正确的图片在类_3GlyB中。并尝试:

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")
PS:R的话,这是有效的:

# collect names
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))

# collect pictures
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)
4jb9z9bj

4jb9z9bj1#

好吧,在我做了之后:

img_ls_contatos = browser.find_elements(By.CLASS_NAME, '_3GlyB')

img_ls_contatos[0].find_elements(By.TAG_NAME, "img")[0].get_attribute("src")

这不是一个漂亮的办法,但解决了。

相关问题