您的位置:首页 > 编程语言 > Python开发

Selenium+Python批量下载图

2016-03-26 16:18 465 查看

介绍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)函数来对当前正在操作的网页截图,判断正在操作的到底是哪个网页。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: