2014-10-15 5 views
0

Я пытаюсь загрузить изображение с веб-страницы с помощью комбинации браузера браузера Splinter (с ChromeDriver) и подушки библиотека. Я использую экземпляр браузера Chrome для входа на веб-сайт и перейдите на страницу с изображением на нем, а затем с помощью метода browser.find_by_tag(), чтобы найти изображение.Использование функции Pillow Image.save() вызывает атрибут AttributeError при попытке загрузить изображение со страницы с помощью Splinter

я пытаюсь использовать Image.save() метод подушки, но он выдает эту ошибку:

C:\Users\my.name\Documents\Development\Python-Scripts>my_script.py 
Traceback (most recent call last): 
    File "C:\Users\my.name\Documents\Development\Python-Scripts\my_script.p 
y", line 31, in <module> 
    my_function() 
    File "C:\Users\my.name\Documents\Development\Python-Scripts\my_script.p 
y", line 19, in my_function 
    farmer_image = Image.save(farmer_image_brobj) 
AttributeError: 'module' object has no attribute 'save' 

И мой код:

from splinter import Browser 
from PIL import Image 

def my_function(): 
    with Browser('chrome') as browser: 
     url = "http://www.blah/login.aspx" 
     url_two = "http://www.blah/ImagePageParent.aspx" 

     browser.visit(url) 
     browser.fill('un', 'blah') 
     browser.fill('pw', 'blah') 
     browser.find_by_name('btn').click() 
     browser.visit(url_two) 
     browser.find_link_by_partial_href('partial_href').click() 

     farmer_image_brobj = browser.find_by_tag('img') 
     farmer_image = Image.save(farmer_image_brobj) 

     browser.visit(url_two) 
     browser.quit() 

my_function() 

ответ

1

С effbot example, вы вызываете это неправильный путь. Вместо

farmer_image_brobj = browser.find_by_tag('img') 
    farmer_image = Image.save(farmer_image_brobj) 

Вы должны использовать метод save() на экземпляре изображения. Таким образом, во-первых, откройте изображение:

farmer_imag = Image.open(...) #something doing with farmer_image_brobj 

к примеру, с помощью запросов, вы могли бы сделать что-то вроде:

r = requests.get('http://example.com/image.jpg') 
farmer_image = Image.open(StringIO(r.content)) 

затем сохранить его, давая путь:

farmer_image.save('my_image.png') 
+0

Спасибо, простите, что я был noob, но когда вы говорите «что-то делать с farmer_image_brobj», что я должен делать с ним? –

+0

@DrBrown Из 'farmer_image_brobj', вы должны получить путь (обычно в атрибуте src). Затем вы должны _get_ содержимого изображения (например, пример с использованием запросов). – fredtantini

+0

Это сработало спасибо! Пришлось изменить импорт для импорта io и StringIO в io.BytesIO. –

-1

Он кидает потому что объект изображения не имеет «save'method. Если вы хотите сохранить изображение, вы можете использовать Image.fromarray (https://pillow.readthedocs.org/reference/Image.html#PIL.Image.fromarray). Используя метод fromarray, создайте объект. Затем используйте метод сохранения.