Как скачать изображения с Selenium и Python - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь загрузить некоторые изображения (скажем, первые 10) с веб-сайта. Проблема в том, что я не знаю, как работает HTML.

Что я сделал до сих пор:

from selenium import webdriver
import time

driver = webdriver.Chrome("C:\web_driver\chromedriver")
url = "https://9gag.com/"
driver.get(url)

time.sleep(5)
driver.find_element_by_xpath("/html/body/div[7]/div[1]/div[2]/div/div[3]/button[2]/span").click()

images = driver.find_elements_by_tag_name('img')
list = []
for image in images:
    print(image.get_attribute('src'))
    list.append(image.get_attribute('src'))

Я хочу загрузить изображения в центре страницы, но программа просто получает изображения на левой боковой панели. Моя попытка решить эту проблему:

from selenium import webdriver
import time

driver = webdriver.Chrome("C:\web_driver\chromedriver")
url = "https://9gag.com/"
driver.get(url)

time.sleep(5)


# this part is to close the cookies pop up
driver.find_element_by_xpath("/html/body/div[7]/div[1]/div[2]/div/div[3]/button[2]/span").click()

    images = driver.find_element_by_class_name("page").get_attribute("img")

    list = []
    for image in images:
        print(image.get_attribute('src'))
        # list.append(image.get_attribute('src'))
        # print("list:", list)
        time.sleep(1)

но я получил следующую ошибку:

Traceback (most recent call last):
  File "C:/Users/asus/PycharmProjects/project1/36.py", line 14, in <module>
    for image in images:
TypeError: 'NoneType' object is not iterable

Process finished with exit code 1

1 Ответ

1 голос
/ 24 апреля 2019
  1. элемент <div class=page> не содержит атрибута img.Вы должны искать тег <img>
  2. find_element_by_, который возвращает только один элемент.Чтобы получить список элементов, вы должны использовать find_elements_by_.Вот почему вы получаете ошибку.
  3. Чтобы получить изображение из сообщений, вы должны указать изображения внутри сообщений.Попробуйте следующий XPath для поиска изображений внутри постов.//div[contains(@id,'stream-')]//div[@class='post-container']//picture/img
  4. Помните, что gif s не являются изображением или внутри тега <image>.Таким образом, вы сможете получать неподвижные изображения только этим методом.

Попробуйте это:

images = driver.find_elements_by_xpath("//div[contains(@id,'stream-')]//div[@class='post-container']//picture/img")
list = []
for image in images:
    print(image.get_attribute('src'))
    list.append(image.get_attribute('src'))

В результате все найденные источники изображений будут добавлены в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...