zoukankan      html  css  js  c++  java
  • 开源you-get项目爬虫,以及基于python+selenium的自动测试利器

    写在前面

    爬虫和自动测试,对于python来说是最合适不过也是最擅长的。

    开源的项目也很多,例如you-get项目https://github.com/soimort/you-get。盗链和爬虫神器。

    python+selenium一般用来做自动化测试,也可以用来抽取 html的dom元素,从而作为前端的爬虫使用

    这些功能对于一些非常规的需求和自动化测试,可以说是量身打造的。

    you-get

    you-get支持的网站,都是直接破解其算法,直接算出playurl的方式,假如有分片,还可以用ffmepg来进行合并。

    不仅仅能抓取目标的封面,标题描述等信息,还可以下载源视频,非常的好用。

    补充一个you-get没有的c站的盗链php版本代码。

           $client = new Client(['cookies' => true]);
            $playUrl = $request->get('playUrl');
            $htmlRes = $client->request('GET', $playUrl);
            $html = $htmlRes->getBody()->getContents();
            preg_match_all( '/(?mi-Us)<li>type=(\d+)&vid=([^\|]+)\|</li>/', $html, $rxMatches) ;
            $type = $rxMatches[1][0];
            $vid = $rxMatches[2][0];
    
            $apiUrl = self::API_URL;
            
            $res = $client->request('GET', $apiUrl, [
                'query' => [
                    'type' => $type,
                    'vid' => $vid
                ]
            ]);
            $xmlData = $res->getBody()->getContents();
    
            $xmlData = simplexml_load_string($xmlData);
            $mp4Url = (string)$xmlData->durl->url;  

    上述用到 Guzzle :功能很完善的 httpclient ,带异步并发功能,别的脚本语言找不到这么好的 httpclient

    c站的防盗链还是比较简单,直接暴露了请求的playurl的参数在dom上。另外加上了cookie的验证。

    注意到'cookies' => true,可以把第一次请求的地址生成的cookie,保存在client,第二次请求的时候,会自动带上cookie,从而破解了cookie的验证限制。

    python+selenium

    自动化测试利器,高端测试或者自带测试功能的程序员,应该需要多了解和学习。而且非常的简单,举个简单的例子:

    from selenium.webdriver.support import expected_conditions as EC
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.wait import WebDriverWait
    
    
    url = 'http://www.bilibili.com/video/av9733485/'
    
    browser = webdriver.PhantomJS()
    browser.get(url)
    wait = WebDriverWait(browser, 20)
    element = wait.until(EC.presence_of_element_located((By.ID,'i_menu_login_btn')))
    # b = browser.find_element_by_xpath("//div[@class='load-layer']/img").get_attribute('src')
    
    element.click()  

    模仿打开浏览器访问url,点击和查找元素,都可以轻松实现,减少重复机械化的人工成本。

  • 相关阅读:
    流程控制之while循环
    流程控制之if...else
    基本运算符
    基本数据类型
    注释
    用户交互
    常量
    test
    查询方法
    删除代码
  • 原文地址:https://www.cnblogs.com/zenghansen/p/7551941.html
Copyright © 2011-2022 走看看