2015-08-14 4 views
0

Я хочу, чтобы загрузить и сохранить изображения с помощью селена в python2.7Загрузка изображений с использованием селена

Я пробовал:

from selenium import webdriver 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.webdriver.common.keys import Keys 

url= "https://in.images.search.yahoo.com/images/view;_ylt=A2oKiHPRis1VplIALaEO9olQ;_ylu=X3oDMTIyN2I2OHZkBHNlYwNzcgRzbGsDaW1nBG9pZANjN2U1ZjU4NjAwMDQ1MDA0OGExZGMxY2Y0MzMyMDk0MwRncG9zAzEEaXQDYmluZw--?.origin=&back=https%3A%2F%2Fin.images.search.yahoo.com%2Fyhs%2Fsearch%3Fp%3D%2522Eiffel%2BGreens%2522%2BBalewadi%2509Pune%26n%3D60%26ei%3DUTF-8%26y%3DSearch%26type%3Dff.40.w81.hp.04-01.in.avg._.0715av%26fr%3Dyhs-avg-fh_lsonsw%26fr2%3Dsb-top-in.images.search.yahoo.com%26hsimp%3Dyhs-fh_lsonsw%26hspart%3Davg%26tab%3Dorganic%26ri%3D1&w=556&h=309&imgurl=www.propertyonepune.com%2Fimg%2Fgallery%2F0becda3e53f8db646a699e54b1333a4c.jpg&rurl=http%3A%2F%2Fwww.propertyonepune.com%2Fproperties%2F46%2FBalewadi&size=49.8KB&name=...+bungalows+by+Eiffel+Developers+%26+Realtors+Ltd.+at+%3Cb%3EBalewadi%3C%2Fb%3E%2C+%3Cb%3EPune%3C%2Fb%3E&p=%22Eiffel+Greens%22+Balewadi%09Pune&oid=c7e5f586000450048a1dc1cf43320943&fr2=sb-top-in.images.search.yahoo.com&fr=yhs-avg-fh_lsonsw&tt=...+bungalows+by+Eiffel+Developers+%26+Realtors+Ltd.+at+%3Cb%3EBalewadi%3C%2Fb%3E%2C+%3Cb%3EPune%3C%2Fb%3E&b=0&ni=21&no=1&ts=&tab=organic&sigr=11lu74lc1&sigb=17t67hvmu&sigi=1284god0v&sigt=12i2gtekb&sign=12i2gtekb&.crumb=wZ3uTmSmDfL&fr=yhs-avg-fh_lsonsw&fr2=sb-top-in.images.search.yahoo.com&hsimp=yhs-fh_lsonsw&hspart=avg&type=ff.40.w81.hp.04-01.in.avg._.0715av" 
driver = webdriver.Firefox() 
driver.get(url) 

path = '//div[@class="iholder"]//img[@src]' 
for k in driver.find_elements_by_xpath(path): 
    items = [] 
    src = (k.get_attribute('src')).encode('utf8') 
    items.append(src) 
    print items 
    for lm in items: 
     driver.get(lm) 
     driver.sendKeys(Keys.Control + "s") 
     driver.send_keys(Keys.Enter) 

Это дает мне ошибку:

Traceback (most recent call last): 
File "C:/Users/Heypillow/Desktop/download.py", line 17, in <module> 
driver.sendKeys(Keys.Control + "s") 
AttributeError: 'WebDriver' object has no attribute 'sendKeys' 

Я ve попытался с:

driver.send_keys(Keys.CONTROL + "s") 

Та же ошибка показывает
Что мне делать, чтобы сохранить изображения? Заранее спасибо

+0

Я редактировал свой пост. пожалуйста, посмотрите –

+0

, это определенно не может быть ИСПРАВЛЯЕМАЯ ошибка, если вы перейдете на правильный метод send_keys вместо Java-Style sendKeys -> поэтому опубликуйте сообщение об ошибке, которое вы получите, если используете только send_keys – drkthng

+0

Ошибка: 'Traceback (последний последний вызов): Файл «C: /Users/Heypillow/Desktop/download.py», строка 17, в driver.send_keys (Keys.Control + «s») AttributeError: объект «WebDriver» имеет нет атрибута 'send_keys'' Я не нашел его другим, что я делаю неправильно? @drkthng –

ответ

1

ошибка вы получаете, потому что .send_keys не свисают из webdriver, он висит прочь webelement , Прежде чем пытаться использовать .send_keys, сначала необходимо получить webelement. Например,

for lm in items: 
    lm.sendKeys(Keys.Control + "s") 

Это не ответит на ваш основной вопрос, но объясняет, почему вы получаете сообщение об ошибке.

Чтобы ответить на ваш основной вопрос, перейдите к нему, и вы найдете много ответов, таких как this one, на которые уже есть ответы.

+0

спасибо, что он решил мою проблему .. Я застрял между концепцией Webdriver и вещью Webelement, которой я верю. –

+0

этот ответ не самый лучший способ (см. Мой ниже), и это может привести к условиям гонки со временем ctrl + s – user2426679

+0

Пример кода не является ответом, это пример кода, чтобы продемонстрировать причину ошибки ... которые, как я думал, были четко сформулированы. Его НЕ следует использовать как потому, что он спам CTRL + S ко всем элементам в «элементах» в течение нескольких мс. – JeffC

1

Похоже, что вы хотите сохранить HTML для каждого изображения, так что вы можете использовать действия, чтобы получить контекстное меню светлячок -> «р» является аббревиатурой для сохранения страницы:

for lm in items: 
     driver.get(lm) 
     body = driver.find_element(By.tagName("body")); 
     ActionChains(driver).move_to_element(body).context_click(htmlElement).send_keys("p").send_keys(Keys.RETURN).perform(); 

Я обычно с использованием Java, так что там могут быть некоторые опечатки в этом питона код моего ;-)

+0

Нет, фактически, я хочу сохранить изображения как файлы image_name.jpg. Но я застрял. Можете ли вы мне помочь? –

1

На самом деле, первая попытка op вернее выбранного ответа. Если вы не отправляете ключи к элементу для ввода, вы отправляете их в браузер для быстрого доступа и т. Д.

ActionChains(driver).key_down(Keys.Control).send_keys("s").key_up(Keys.Control)‌​‌​.perform() 
Смежные вопросы