DrissionPage 是什么 DrissionPage 是一个基于 python 的网页自动化工具。 它既能控制浏览器,也能收发数据包,还能把两者合而为一。 可兼顾浏览器自动化的便利性和 requests 的高效率。 它功能强大,内置无数人性化设计和便捷功能。 它的语法简洁而优雅,代码量少,对新手友好。
用 requests 做数据采集面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高,开发效率不高。使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。
因此,这个库设计初衷,是将它们合而为一,同时实现“写得快”和“跑得快”。能够在不同需要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。 除了合并两者,本库还以网页为单位封装了常用功能,提供非常简便的操作和语句,使用户可减少考虑细节,专注功能实现。 以简单的方式实现强大的功能,使代码更优雅。
以前的版本是对 selenium 进行重新封装实现的。从 3.0 开始,作者另起炉灶,对底层进行了重新开发,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。
示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from DrissionPage import ChromiumPage page = ChromiumPage()page .get('https://gitee.com/login' )ele = page .ele('#user_login' ) ele.input('您的账号' ) page .ele('#user_password' ).input('您的密码' )page .ele('@value=登 录' ).click()
应用实例 淘宝商品截图 1 2 3 4 5 6 page = ChromiumPage(co) page.get(img_url,retry=1 , interval=1 , timeout=1.5 ) img = page('tag:img' ) img.get_screenshot(path='./' , name='temp_img.jpg' )
未来工厂订单数据爬取 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 from DrissionPage import SessionPage, SessionOptions from DrissionPage import ChromiumPagefrom DrissionPage import ChromiumOptionsimport reimport timeco = ChromiumOptions(read_file=False ) co.set_browser_path(r'C:\Program Files\Google\Chrome\Application\chrome.exe' ) co.set_user_data_path(r'C:\Users\weiek\AppData\Local\Google\Chrome\User Data' ) url_base = "https://www.wenext.cn/index.php?route=account/order&filter_time=6&page=" page = ChromiumPage(co) for i in range (1 , 20 ): print (i) url = url_base + str (i) page.get(url) page.wait.doc_loaded() result_num = re.findall(r'订单编号 (\d+)' , page.html) try : for i in result_num: page.get('https://www.wenext.cn/index.php?route=account/order/info&order_id=' + i) page.wait.doc_loaded() result_money = re.findall(r'余额\((.*?)\)' , page.html)[0 ] print (result_money) result_time1 = re.findall(r'预计在(.*?)前发货' , page.html)[0 ].replace('23:00:00' , ' ' ) print (result_time1) result_time2_list = re.findall(r'<td class="order-body-time">(.*?)</td>' , page.html, re.S) result_time2 = '0' for j in result_time2_list: if j == '已发货,待签收' : index = result_time2_list.index(j) result_time2 = result_time2_list[index - 1 ] if result_time2 != '0' : with open ('wenext.txt' , 'a' ) as f: f.write(i + ' ' + result_money + ' ' + result_time1 + ' ' + result_time2 + ' ' +'\n' ) print (result_time2) except : with open ('wenexterr.txt' , 'a' ) as f: f.write(i + ' ' + 'error' + ' ' + 'error' + ' ' + 'error' + ' ' +'\n' )