Pracuję z selenem i chcę dostać się do zdjęć. Problem polega na tym, że selen działa do 21 obrazów, a potem zwraca puste adresy URL, jak poniżej.

1 :  https://photo.venus.com/im/19230307.jpg?preset=dept
2 :  https://photo.venus.com/im/18097354.jpg?preset=dept
3 :  https://photo.venus.com/im/19230311.jpg?preset=dept
4 :  https://photo.venus.com/im/19234200.jpg?preset=dept
5 :  https://photo.venus.com/im/17307902.jpg?preset=dept
6 :  https://photo.venus.com/im/19305650.jpg?preset=dept
7 :  https://photo.venus.com/im/19060456.jpg?preset=dept
8 :  https://photo.venus.com/im/18295767.jpg?preset=dept
9 :  https://photo.venus.com/im/19102600.jpg?preset=dept
10 :  https://photo.venus.com/im/19230297.jpg?preset=dept
11 :  https://photo.venus.com/im/16181113.jpg?preset=dept
12 :  https://photo.venus.com/im/19101047.jpg?preset=dept
13 :  https://photo.venus.com/im/19150290.jpg?preset=dept
14 :  https://photo.venus.com/im/19042244.jpg?preset=dept
15 :  https://photo.venus.com/im/19230329.jpg?preset=dept
16 :  https://photo.venus.com/im/19101040.jpg?preset=dept
17 :  https://photo.venus.com/im/17000870.jpg?preset=dept
18 :  https://photo.venus.com/im/19100952.jpg?preset=dept
19 :  https://photo.venus.com/im/19183658.jpg?preset=dept
20 :  https://photo.venus.com/im/19102243.jpg?preset=dept
21 :  https://photo.venus.com/im/18176590.jpg?preset=dept
22 :  data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC
23 :  data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC
24 :  data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC
25 :  data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC
26 :  ...




Użyłem nawet czasu snu, ale to nie zadziałało. Wszelkie pomysły będą mile widziane.

Oto mój kod:

url = 'https://www.venus.com/products.aspx?BRANCH=7~63~'
driver.get(url)

product_container_ls = driver.find_elements_by_class_name('product-container')

for prd in product_container_ls:
    # Finding elements of images by class name
    image_lm = prd.find_element_by_class_name('main')

    # The url to image
    image_url = image_lm.get_attribute('src')
    print(image_id, ': ', image_url)

    # Image Path
    image_path = os.path.join(directory, f'{image_name}.jpg')

    # Getting and saving the image
    urllib.request.urlretrieve(image_url, image_path)

    image_id += 1
    time.sleep(3)
driver.quit()

Dzięki!

-1
Naik 20 listopad 2019, 22:17
2
Pozycja 22 (i inne) nie jest pustym obrazem, ale obrazem osadzonym. Czy próbowałeś go zdekodować do png?
 – 
furas
20 listopad 2019, 22:25
1
BTW: niektóre strony używają "leniwego ładowania" i ładują obraz (umieszczają poprawny adres URL, aby go załadować) podczas przewijania strony. Może musisz przewinąć stronę, a JavaScript umieści poprawny adres URL do obrazu.
 – 
furas
20 listopad 2019, 22:27
2
Jak powiedziałem - musisz przewijać stronę.
 – 
furas
20 listopad 2019, 22:29
2
Ponieważ występuje leniwe ładowanie, może być konieczne zeskrobanie wartości data-original, ponieważ jest ona używana do ostatecznego src
 – 
A.Patterson
20 listopad 2019, 22:31
1
Sprawdziłem HTML i każdy "leniwy" obrazek ma data-original= z linkiem do załadowanego obrazka - użyj go.
 – 
furas
20 listopad 2019, 22:32

1 odpowiedź

Poszukaj atrybutu data-original zamiast src, ponieważ w ten sposób leniwie ładują obrazy. Zmodyfikowałem następującą zmienną i otrzymałem wszystkie obrazy

image_url = image_lm.get_attribute('data-original')

Oto próbka mojego wydruku dla tej zmiennej:

https://photo.venus.com/im/18235739.jpg?preset=dept
https://photo.venus.com/im/19034244.jpg?preset=dept
https://photo.venus.com/im/17199949.jpg?preset=dept
https://photo.venus.com/im/19121197.jpg?preset=dept
https://photo.venus.com/im/18235918.jpg?preset=dept
https://photo.venus.com/im/18366410.jpg?preset=dept
3
A.Patterson 20 listopad 2019, 22:36
Mam jeszcze jedno pytanie. Jeśli przejdziesz do udostępnionego przeze mnie łącza i klikniesz jeden z obrazów, zobaczysz więcej obrazów. Chcę pobrać te obrazy. Czy powinienem użyć dodatkowego sterownika do pobierania tych obrazów, czy mogę je pobrać przy użyciu tego samego sterownika?
 – 
Naik
21 listopad 2019, 00:40
Być może będziesz musiał użyć innego procesu. Gdy masz już listę adresów URL, możesz je pobrać bez konieczności korzystania z Selenium. Wiem, że robiłem to już wcześniej, ale nie mam teraz kodu.
 – 
A.Patterson
21 listopad 2019, 02:15