#coding=utf-8
from time import sleep
import unittest
from selenium import webdriver
from selenium.webdriver import Remote
from selenium.webdriver.common.by import By#元素定位
import sys

def browser():#启动浏览器驱动
    '''
    driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                                                desired_capabilities={'platform':'ANY',
                                                                      'browserName':'chrome',
                                                                      'version':'',
                                                                     })'''
    driver = webdriver.Ie()
    return driver

class MyTest(unittest.TestCase):#框架

    def setUp(self):
        print("开始执行用例!")
        self.driver = browser()
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()

    def tearDown(self):
        self.driver.quit()
        print('用例执行结束!')
        
class Page(object):#基础类
    '''
    页面基础类,用于所有页面的继承
    '''
    bbs_url = 'https://book.douban.com/'
    
    def __init__(self,selenium_driver,base_url=bbs_url,parent=None):#初始化
        self.base_url = base_url
        self.driver = selenium_driver
        self.timeout = 30
        self.parent = parent
    
    def on_page(self):#断言url是否相等
        return self.driver.current_url == (self.base_url + self.url)
        
    def _open(self,url):
        url = self.base_url + url
        self.driver.get(url)
        assert self.on_page(),'获取的url和当前url不匹配.url:%s' % url
          
    def open(self):#打开浏览器  
        self._open(self.url)
    
    def find_element(self,*loc):#单个元素定位
        return self.driver.find_element(*loc)
    
    def find_elements(self,*loc):#多个元素定位
        return self.driver.find_elements(*loc)
    

class Douban_film(Page):#页面对象封装
    u'''豆瓣读书排序'''
    url = '/'
    #元素定位
    bbs_booknum_loc = (By.XPATH,'//li/div[2]/p[1]/span[2]')#评分
    bbs_bookname_loc = (By.XPATH,'//li/div[2]/h4/a')#书名
    bbs_bookauther_loc = (By.XPATH,'//li/div[2]/p[2]')#作者
    bbs_booktype_loc = (By.XPATH,'//li/div[2]/p[3]')#类型
    bbs_bookcomments_loc = (By.XPATH,'//li/div[2]/p[5]')#评论
    #元素封装
    def bbs_bookname(self):#豆瓣评分
        _input = self.driver.find_elements(*self.bbs_bookname_loc)# 选择页面上所有的tag name 为input 的元素
        bookname = []
        for i in _input:
            bookname.append(i.text)#取出值并添加到数组
        else:
            sleep(1)
        return bookname
                              
    def bbs_booknum(self):#豆瓣评分
        _input = self.driver.find_elements(*self.bbs_booknum_loc)# 选择页面上所有的tag name 为input 的元素
        booknum = []
        for i in _input:
            booknum.append(i.text)#取出值并添加到数组
        else:
            sleep(1)
        return booknum
        
    def bbs_bookauther(self):#作者
        _input = self.driver.find_elements(*self.bbs_bookauther_loc)# 选择页面上所有的tag name 为input 的元素
        bookauther = []
        for i in _input:
            bookauther.append(i.text)#取出值并添加到数组
        else:
            sleep(1)
        return bookauther

    def bbs_booktype(self):#类型
        _input = self.driver.find_elements(*self.bbs_booktype_loc)# 选择页面上所有的tag name 为input 的元素
        bookautype = []
        for i in _input:
            bookautype.append(i.text)#取出值并添加到数组
        else:
            sleep(1)
        return bookautype
        
    def bbs_bookcomments(self):#评论
        _input = self.driver.find_elements(*self.bbs_bookcomments_loc)# 选择页面上所有的tag name 为input 的元素
        bookaucomments = []
        for i in _input:
            bookaucomments.append(i.text)#取出值并添加到数组
        else:
            sleep(1)
        return bookaucomments
    
    def out_node(self):#排序
        list1 = self.bbs_booknum()
        list2 = self.bbs_bookname()
        list3 = self.bbs_bookauther()
        list4 = self.bbs_booktype()
        list5 = self.bbs_bookcomments()
        list = [[a,b,c,d,e] for a,b,c,d,e in zip(list1,list2,list3,list4,list5)]
        team = list[:]
        team.sort()
        print('从小到大排序:%s'%team)
        return team
    
    def writetxt(self):#写入txt文件
        a = self.out_node()
        f1 = open('b.txt','w',encoding='utf-8')#写入文件编码格式,不写的话有时候会导致解析错误   
        for i in a:#循环读取内嵌列表
            #if isinstance(i,list):#判断是否是一个列表
            print(i)#分别打印内嵌列表里的列表
            f1.writelines(i)#写入txt文件
            f1.write('\n')#写入文件时换行
        f1.close()
          
class test_Douban_film(MyTest):
    u'''豆瓣读书排序'''
    
    def test1(self):
        u'''豆瓣评分按降序排列并保存到txt文件'''
        p1 = Douban_film(self.driver)
        p1.open()
        p1.writetxt()

if __name__ == '__main__':
    unittest.main()

使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中的更多相关文章

  1. 按行读取TXT文件中的内容

    public Dictionary<int, string> GetDicFromLog() { try { StreamReader sr = new StreamReader(file ...

  2. 从txt文件中读取数据放在二维数组中

    1.我D盘中的test.txt文件内的内容是这样的,也是随机产生的二维数组 /test.txt/ 5.440000 3.4500006.610000 6.0400008.900000 3.030000 ...

  3. 读取同一文件夹下多个txt文件中的特定内容并做统计

    读取同一文件夹下多个txt文件中的特定内容并做统计 有网友在问,C#读取同一文件夹下多个txt文件中的特定内容,并把各个文本的数据做统计. 昨晚Insus.NET抽上些少时间,来实现此问题,加强自身的 ...

  4. SQL C# nvarchar类型转换为int类型 多表查询的问题,查询结果到新表,TXT数据读取到控件和数据库,生成在控件中的数据如何存到TXT文件中

    在数据库时候我设计了学生的分数为nvarchar(50),是为了在从TXT文件中读取数据插入到数据库表时候方便,但是在后期由于涉及到统计问题,比如求平均值等,需要int类型才可以,方法是:Conver ...

  5. Java中读取txt文件中中文字符时,出现乱码的解决办法

    这是我写的一个Java课程作业时,遇到的问题. 问题描述: 我要实现的就是将txt文件中的内容按一定格式读取出来后,存放在相应的数组. 我刚开始运行时发现,英文可以实现,但是中文字符就是各种乱码. 最 ...

  6. Flex读取txt文件中的内容(三)

    Flex读取txt文件中的内容 1.设计源码 LoadTxt.mxml: <?xml version="1.0" encoding="utf-8"?> ...

  7. Flex读取txt文件中的内容(二)

    Flex读取txt文件中的内容 自动生成的文件 LoadTxt-app.xml: <?xml version="1.0" encoding="utf-8" ...

  8. Flex读取txt文件中的内容(一)

    Flex读取txt文件中的内容 phone.txt: 13000003847 13000003848 13000003849 13000003850 13000003851 13000003852 1 ...

  9. Flex读取txt文件中的内容报错

    Flex读取txt文件中的内容 1.具体错误如下 2.错误原因 读取文件不存在 var file:File = new File(File.applicationDirectory.nativePat ...

随机推荐

  1. 我为NET狂官方面试题-数据库篇

    求结果:select "1"? 查找包含"objs"的表?查找包含"o"的数据库? 求今天距离2002年有多少年,多少天? 请用一句SQL获 ...

  2. ExtJS 4.2 组件介绍

    目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...

  3. angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation

    今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:

  4. webapp应用--模拟电子书翻页效果

    前言: 现在移动互联网发展火热,手机上网的用户越来越多,甚至大有超过pc访问的趋势.所以,用web程序做出仿原生效果的移动应用,也变得越来越流行了.这种程序也就是我们常说的单页应用程序,它也有一个英文 ...

  5. webstorm下载&&安装过程&&打开项目

    一.webstorm下载 WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为"Web前端开发神器"."最强大的HT ...

  6. C#文件安全管理解析

    在实际的项目开发中,我们经常需要使用到文件的I/O操作,主要包含对文件的增改删查等操作,这些基本的操作我们都是很熟悉,但是较少的人去考虑文件的安全和操作的管理等方面,例如文件的访问权限管理,文件数据的 ...

  7. HTML+CSS 项目总结

    在过去的大概一个月的学习,基本掌握了HTML+CSS的用法和特性. 这个星期老师给我们布置了一个PC端的实战项目,并且要求在3-4天内完成,我不惜废寝忘食,在紧迫的时间内大致地完成了,但是有些效果不能 ...

  8. Android中的多线程断点下载

    首先来看一下多线程下载的原理.多线程下载就是将同一个网络上的原始文件根据线程个数分成均等份,然后每个单独的线程下载对应的一部分,然后再将下载好的文件按照原始文件的顺序"拼接"起来就 ...

  9. nginx安装

    nginx工作模式-->1个master+n个worker进程 安装nginx的所需pcre库[用于支持rewrite模块] 下载软件方法: 搜索 pcre  download 网址:http: ...

  10. EntityFramework 6 + Mysql 生成POCOs

    问题 使用EDMX文件 EF Power Tools参数不正确的解决方法 对于"异常来自 HRESULT:0x80070057 (E_INVALIDARG)",有方法说" ...