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.X2.安装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)函数来对当前正在操作的网页截图,判断正在操作的到底是哪个网页。
相关文章推荐
- Caffe Python MemoryDataLayer Segmentation Fault
- python-numpy-00
- Python 编程核心 - Chapter9练习
- 朴素贝叶斯算法(Naive Bayes)算法的python实现 含源代码
- python2.7;解决中文无法正常显示问题
- 安装pygraphviz遇到的问题解决办法。
- python面试题
- 动手写一个Python Web 框架学习笔记 - 相关依赖学习(2)
- python--基础学习(六)sqlite数据库基本操作
- Python学习:异步IO:协程和asyncio
- Pyhton: abs() 函数
- Python_模拟登陆新浪微博
- ubuntu下升级python
- Windows下IPython的配置安装
- Python在线笔试琐碎
- python 输出冒号;引号嵌套问题
- 中文Windows下用Python修改MAC地址
- 练习5:python的格式化字符
- 【资源汇集.转】Python 学习资源
- 17. Letter Combinations of a Phone Number