|
使用python来刷csdn下载积分(一)中我们实现了csdn下载的自动评价,但是这样只是评价自己下载过的资源,还不能实现刷分的目的。本次,我们将学习批量下载csdn的免费资源。
csdn自己是带了资源的搜素工具的,网址: http://download.csdn.net/advanced_search, 里面是可以搜索指定资源积分的下载资源的。但是用起来非常不好用,总是搜索不到想要的资源。
于是我们就弃之不用,使用百度来搜索,搜索的关键字是 "资源积分:0分" 联通下载 pdf site:download.csdn.net"
这样能得到一大堆的免费资源
下一步就是解析出每个资源对应的url 去访问并下载。
代码如下:
1 #coding=utf-8
2 import os,time
3 from splinter import Browser
4 from timeout import timeout
5
6
7 def login(username="wojiaoqsc@gmail.com",passwd="dengdengdeng"):
8 """登录csdn"""
9 global browser
10 url = "http://passport.csdn.net/account/login"
11 browser.visit(url)
12 # browser.fill('f', 'splinter - python acceptance testing for web applications')
13 # Find and click the 'search' button
14 btnEmail = browser.find_by_id('username')
15 btnPasswd = browser.find_by_id('password')
16 btnRemember = browser.find_by_name('rememberMe')
17
18
19 btnEmail.fill(username)#用户名
20 btnPasswd.fill(passwd)#密码
21 btnRemember.check()#
22 #print dir(browser)
23 # Interact with elements
24 btnSubmit = browser.find_by_value("登 录")
25 btnSubmit.click()#登录
26 time.sleep(7)
27 # button.click()
28
29 @timeout(30)
30 def download():
31 global browser
32
33 print "try to clcik"
34 btnDownload = browser.find_by_css(r'#wrap > div.bd.clearfix > div.article > div.information.mb-bg.clearfix > div.info > a.btn.btn-primary.btn-lg.WCDMA.btndownload')[0]
35 btnDownload.click()
36 time.sleep(4)
37 btnDownload = browser.find_by_css(r'#download_btn2')[0]
38 btnDownload.click()
39 # btnDownload = browser.find_by_xpath(r'//*[@id="download_btn2"]')[0]
40 # btnDownload.click()
41 time.sleep(3)
42 # btnConfirm = browser.find_by_xpath(r'//*[@id="user_score_btn"]')[0]
43 # btnConfirm.click()
44 # print "done"
45
46 # try:
47 btnConfirm = browser.find_by_xpath(r'//*[@id="user_score_btn"]')[0]
48 btnConfirm.click()
49 # time.sleep(3)
50 # print "done"
51 # except:
52 # print "error"
53
54 def searchFree():
55 """用百度搜索免费的资源,返回资源的列表"""
56 global browser
57 url = "http://www.baidu.com"
58 browser.visit(url)
59 btnKeyWord = browser.find_by_id('kw')[0]
60 btnKeyWord.fill(u'"资源积分:0分" 联通下载 pdf site:download.csdn.net')#密码
61 btnSubmit = browser.find_by_id("su")[0]
62 btnSubmit.click()#提交搜素
63
64 base = 0
65 time.sleep(4)
66 for page in range(1,90):
67 # timerThread = closeWindow(browser)
68 # timerThread.start()
69 print base," base"
70 print page," page"
71 for x in range(base+1,base+11):
72 print x
73 time.sleep(4)
74 urlTmp = browser.find_by_xpath('//*[@id="%d"]/h3/a'%x)[0]
75 urlTmp.click()
76 browser.windows.current = browser.windows[1]
77 browser.driver.set_window_size(800,1000)
78 time.sleep(6)
79 download()
80 print "time out error"
81 browser.windows.current = browser.windows[0]
82 browser.windows.current.close_others() #关闭窗口
83 base = base + 10
84 nextPage = browser.find_link_by_text(u"下一页>")[0]
85 nextPage.click()
86
87
88 if __name__ == "__main__":
89 browser = Browser('chrome')#
90 login()
91 searchFree()
92 print "Hello Kitty"
代码未经过整理,有些乱。
中间遇到的主要问题就是元素的加载。
有的时候由于网络状况的不同,元素的加载时间也不一样。所以中间会有很多sleep。而且csdn还使用了谷歌的网站统计功能,有的时候网页加载时间就更加的长。网页中的js脚本有的时候不能执行,因为js脚本的执行顺序是比网页的加载顺序靠后的。
还有完善的空间,最后看下刷分的成果。
|
|
|