Ich möchte Bilder mit Selen in Python 2.7 herunterladen und speichern

Ich habe es versucht:

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)

Es gibt mir Fehler:

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'

Ich habe versucht mit:

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

Der gleiche Fehler wird
angezeigt Was soll ich tun, um die Bilder zu speichern? Vielen Dank im Voraus

0
Ritobroto Mukherjee 14 Aug. 2015 im 11:08

3 Antworten

Beste Antwort

Der Fehler, den Sie erhalten, ist, dass .send_keys nicht an webdriver hängt, sondern an webelement hängt. Sie müssen zuerst ein webelement erhalten, bevor Sie versuchen, .send_keys zu verwenden. Beispielsweise,

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

Dies wird Ihre Hauptfrage nicht beantworten, erklärt jedoch, warum Sie die Fehlermeldung erhalten.

Um Ihre Hauptfrage zu beantworten, googeln Sie sie und Sie finden viele Antworten wie diese das hat schon antworten.

1
Community 23 Mai 2017 im 11:52

Tatsächlich ist der erste Versuch von op korrekter als die ausgewählte Antwort. Wenn Sie keine Schlüssel zum Eingeben an ein Element senden, senden Sie sie für Verknüpfungen usw. an den Browser.

ActionChains(driver).key_down(Keys.Control).send_keys("s").key_up(Keys.Control)‌​‌​.perform()
1
user2426679 18 Aug. 2015 im 21:59

Es sieht so aus, als ob Sie das HTML für jedes Bild speichern möchten, also können Sie Aktionen verwenden, um das Kontextmenü von Firefox aufzurufen -> "p" ist eine Verknüpfung zum Speichern der Seite:

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();

Ich verwende normalerweise Java, daher enthält dieser Python-Code möglicherweise einige Tippfehler ;-)

1
drkthng 14 Aug. 2015 im 09:58