переименовать скриншот с названием статьи на сайте, используя селен - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь получить все частичные скриншоты для каждой статьи с этого сайта .Мне удается найти элемент с элементом ниже.

<div id="post-4474417" class="post-box    " data-permalink="https://hypebeast.com/2019/1/ten-best-sneakers-paris-fashion-week-fall-winter-2019-runway-shows" data-title="The 10 Best Sneakers From Paris Fashion Week's FW19 Runways">

Однако, когда я пытаюсь переименовать скриншоты, используя element.text, я просто получаю то же имя, извлеченное из самого последнего элемента на сайте. Однако когда явывод с print(item), он дает мне все различные названия.Что я тут не так делаю?

Выход print(item):

  • 10 лучших кроссовок с FW19 Runways Paris Fashion Week
  • sacai Дебюты НовыйКроссовки Nike во время FW19 Paris Runway Show
  • Причудливая коллекция Sacai SS19 включает в себя Nike Collaboration
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from PIL import Image
from io import BytesIO
import os
import time
from random import randint
from time import sleep
import requests
from bs4 import BeautifulSoup as bs

driver = webdriver.Chrome('/Users/Documents/python/Selenium/bin/chromedriver')
driver.get('https://hypebeast.com/search?s=nike+sacai+fashion')
time.sleep(1)
products = [element for element in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='post-box    ']")))]
element_item = [element.text for element in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//h2/span")))]
for item in element_item:
    print(item)

i = 1
for product in products:
    location = product.location_once_scrolled_into_view

    size = product.size
    png = driver.get_screenshot_as_png() 
    im = Image.open(BytesIO(png)) 

    left = location['x']
    top = location['y']
    right = location['x'] + size['width']
    bottom = location['y'] + size['height']
    im = im.crop((left, top, right, bottom)).save(str(i)+"_"+item+".png")
    i=i+1
    if not product :
        pass

sleep(randint(1,2))

driver.quit()

1 Ответ

2 голосов
/ 12 апреля 2019
im = im.crop((left, top, right, bottom)).save(str(i)+"_"+item+".png")

Это вернет вам последнее значение, потому что при повторении цикла в конце цикла вы получите только последнее значение.

Поскольку у вас уже есть значения списка внутри элемента списка element_itemВы можете использовать этот список внутри следующего цикла for следующим образом.

i = 1
for product in products:

 im = im.crop((left, top, right, bottom)).save(str(i)+"_"+ element_item[i-1] +".png")

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