单字段测试 xpath+jpath+re+requests+phantomjs

简介: 单字段测试 xpath+jpath+re+requests+phantomjs

xpath+jpath+re单字段测试


最近测试发现这三个每次用都要重复写的东西太多了,然后封装了一下,做了一个单字段测试的类和接口,方便以后测试使用,只需要把类和包导入然后就可以直接使用了,简单方便


import json, re
from jsonpath import jsonpath
import chardet
from lxml import etree
class Spiders(object):
    def jpath(self, html,regex):
        body = str(html)  # 可能有乱码问题
        if isinstance(body, str) or isinstance(body, str):
            body = json.loads(body)
        try:
            result = jsonpath(body, regex)
        except Exception as  e:
            result = []
            print (e)
        if not result:
            result = []
        return result
    def rpath(self, html,regex):
        try:
            body = html
            detector = chardet.detect(str(body))
            if detector.get("encoding") == "ascii":
                body = str(body).decode("unicode-escape")
        except Exception as e:
            body = str(html)
        result = re.findall(regex, body)
        return result
    def xpath(self, html,regex):
        parse_data = [""]
        if regex:
            regexs = regex.split("&")
            try:
                for i in range(len(regexs)):
                    xml = etree.HTML(html)
                    result = xml.xpath(regexs[i].strip())
                    if result:
                        return result
                return []
            except Exception as  e:
                print (e)
        return parse_data

接口用的是post传参方式,根据困难度选择式调用requests或是phantomjs

def spider_xpath(request):
    result = {}
    # datas = []
    spider = Spiders()
    try:
        data = request.body
        data = json.loads(data)
        url = data['url']    #url
        rule = data['rule']  #抓取规则
        ru_type = data['type'] #xpath,re,jpath
        difficult = data['difficult'] #普通(a),特殊(b)
        if difficult == 'a':
            res = requests.get(url,headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}).text
        else:
            browser = webdriver.PhantomJS(executable_path=r"../phantomjs_w/bin/phantomjs.exe")
            browser.get(url)
            time.sleep(2)
            res = browser.page_source
        if ru_type == 'xpath':
            datas = spider.xpath(res,rule)
        elif ru_type == 'rpath':
            datas = spider.rpath(res,rule)
        else:
            datas = spider.jpath(res,rule)
        detector = chardet.detect(str(datas))
        if detector.get("encoding") == "ascii":
            datas = str(datas).decode("unicode-escape")
        print datas
        result['page'] = datas
        result['message'] = '测试成功'
        result['code'] = 1
        print '成功'
    except Exception as e:
        print e
        result['message'] = '测试失败'
        result['code'] = -1
    return HttpResponse(json.dumps(result, cls=JSONEncoder), content_type="application/json")


目录
相关文章
|
7月前
|
测试技术
Cypress如何设置全局URL?
Cypress如何设置全局URL?
111 0
|
6月前
|
数据采集 Web App开发 iOS开发
自定义User-Agent:使用Python Requests进行网络请求
自定义User-Agent:使用Python Requests进行网络请求
|
Web App开发 Python
Python Chrome handless(无界面浏览器,add_argument 支持哪些参数,替代 PhantomJS)
Python Chrome handless(无界面浏览器,add_argument 支持哪些参数,替代 PhantomJS)
175 0
|
网络安全
10.每天进步一点点---Python-Requests HTTP 请求库-2
10.每天进步一点点---Python-Requests HTTP 请求库-2
|
数据采集 JSON 网络安全
9.每天进步一点点---Python-Requests HTTP 请求库
9.每天进步一点点---Python-Requests HTTP 请求库
|
Web App开发
Selenium自动化chrome驱动版本匹配但是调用浏览器失败:Only local connections are allowed. 问题解决
Selenium自动化chrome驱动版本匹配但是调用浏览器失败:Only local connections are allowed. 问题解决
454 0
|
JSON API 数据格式
Node【六】内置模块 【url模块与queryString】
Node【六】内置模块 【url模块与queryString】
151 0
|
JSON 数据格式 Python
Python实战:使用requests通过post方式提交json数据
Python实战:使用requests通过post方式提交json数据
593 0
python requests【1】处理url模块
python requests【1】处理url模块
|
Python
Python3下requests库发送multipart/form-data类型请求
[本文出自天外归云的博客园] 要模拟multipart/form-data类型请求,可以用python3的requests库完成。代码示例如下: #请求的接口url url = "url" #假设待上传文件与脚本在同一目录下 dir_path = os.
4539 0