网页爬虫实例一(网页截屏)

测试网站页面,往往是考验测试眼力的时候,大多数情况都要打开网站页面对着原型图一点点比对。如果碰到网页加载太慢或者需要测试兼容性的时候很是心累,如果可以利用程序自动将对应的网页截图,然后直接拿着原型跟截图比对呢,会不会稍微好一些呢?

以下就是我个人写的网页爬虫小程序,程序主要是获取某网页链接及其页面中的所有有效链接,并将有效链接打开的页面截图保存到指定目录中

coding=utf-8
import requests
from selenium import webdriver
import os,time,re
#获取搜狐网页所有有效链接,并将链接到的页面截图保存到指定目录中
class PS_sohu(object):
    def __init__(self,path):
        self.driver=webdriver.Firefox()
        if os.path.exists(path):
            os.chdir(path)
        else:
            os.mkdir(path)
            os.chdir(path)
    #获取搜狐网页所有的有效链接
    def get_valid_link(self,url):
        response=requests.get(url)
        all_links=re.findall(r'href="(.*?)"',response.text)
        valid_links=[]
        #筛选出有效链接
        for link in list(set(all_links)):
            if re.search(r'(\.css)',link):
                continue
            elif link.find('javascript')!=-1 or link.find('mailto')!=-1:
                continue
            elif link.strip()==''or link.strip()=='#'or link.strip()=='/':
                continue
            elif link.startswith('//'):
                link='http:'+link
                valid_links.append(link.strip())
            else:
                valid_links.append(link.strip())
        return valid_links
    #得到有效链接的截图
    def get_picture(self,url_list):
        for url in url_list:
            try:
                self.driver.set_page_load_timeout(10)#设置网页加载超时时间为10秒
                self.driver.get(url)
                self.driver.get_screenshot_as_file('%d.png'%time.time())#截取网页内容,已当前时间戳为图片命名保存
                print self.driver.current_url#打印当前网页地址
            except:
                s= u'当前网页超时:%s\n' %url
                #将超时的网站保存到文件中
                with open('test.txt','a') as f:
                    f.write(s)
                print s
    def quit(self):
        self.driver.quit()
if __name__=="__main__":
    path=r'd:\dd\a'
    url='http://www.xxx.com'
    ps_sh=PS_sohu(path)
    valid_links=ps_sh.get_valid_link(url)
    s_time=time.time()
    ps_sh.get_picture(valid_links)
    print '用时:%d'%(time.time()-s_time)
    ps_sh.quit()
    

猜你喜欢

转载自blog.csdn.net/qq_32551117/article/details/80597843