Selenium+Python批量下载图

介绍Selenium

它是一个自动化的测试工具,模拟人在操作网页,而且确实是启动了浏览器内核在工作,就像人在点击网页和想网页发送内容一样,非常真实。

Selenium提供了很多语言的接口,因为我对Python比较熟悉,而且Python使用起来也很方便,所以就选择这个组合,这里是Selenium的Python接口的介绍。官网里面有个例子,很简洁,却概括了selenium主要的功能。

官网主要内容

1.如何启动一个浏览器内核,这里面可以选择Firefox或者Chrome。因为我使用Firefox时候设置了不要每次下载都询问,但还是每次下载都询问,这样就没能批量下载图片了。因为selenium只能操作浏览器,不能进行操作系统级别的操作,来点击下载按钮。

2.如何打开一个网页。

3.如何定位网页上面的元素,这里涉及到一些网页设计的知识,有需要的,大概看看就行。

4.定位到元素以后,如何与网页进行交互,如向搜索栏填入内容,点击下载按钮等等。

5.当打开多个标签页,如何确定自己当前正在操作哪个标签页,以及如何进行标签页之间的切换。

安装过程

1.首先是安装python3.X

2.安装python3-pip

sudo apt-get install python3-pip

3.使用pip安装selenium

sudo pip3 install selenium

4.安装Chrome

下载Chrome

解压    unzip chromedriver_linux64.zip

转移    sudo mv chromedriver /usr/local/


现在就可以愉快的使用Selenium批量下载图片了。


贴一段抓取百度麦当劳图片的代码

#!/usr/bin/env python

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import *
from random import *

url = "http://image.baidu.com/"
content = u"麦当劳"

driver = webdriver.Chrome(executable_path="/usr/local/chromedriver")

sleep(3)#等待浏览器启动
driver.get(url)

elem = driver.find_element_by_id('kw') #定位输入栏
elem.send_keys(content) #输入要搜索的内容

elem = driver.find_element_by_class_name("s_btn") #定位搜索按钮
elem.click() #点击搜索按钮,跳转到搜索结果页面

sleep(5)#等待页面加载

xpath = '//*[@id="imgid"]/div[1]/ul/li[5]' #定位一个非推广页面
elem = driver.find_element_by_xpath(xpath)
elem.click()

driver.save_screenshot("1.png")

#跳转到显示单张图片的页面
for i in driver.window_handles:
    if i != driver.current_window_handle:
        driver.switch_to_window(i)
        break;

while(1):
    try:
        xpath = '//*[@id="toolbar"]/span[7]' #定位下载按钮
        elem = driver.find_element_by_xpath(xpath)
        elem.click() #点击下载按钮
        sleep(randint(2,5))
        elem = driver.find_element_by_class_name("img-next") #定位下一张按钮
        elem.click()#点击下一张按钮
        sleep(randint(2,5))
    except Exception as e:
        sleep(randint(2,5))
        xpath = '//*[@id="picList1"]/li[5]' #定位一个非推广页面
        elem = driver.find_element_by_xpath(xpath)
        elem.click()

driver.close()


一些经验教训

1.在这个过程中最主要的问题就是定位元素,能够定位到元素就好办了。如果对网页设计不太熟悉,可以直接点到相应的元素,使用(Chrome)浏览器的检查功能,然后Copy->Copy XPath就可以定位元素了。

2.在定位元素的时候,最容易出现的错误就是当前操作的页面是A,你却在定位页面B上面的元素,换句话说,就是不知道当前正在操作哪个网页。可以通过save_screen_shot(filename)函数来对当前正在操作的网页截图,判断正在操作的到底是哪个网页。







你可能感兴趣的:(Selenium+Python批量下载图)