拽神(DrissionPage)使用介绍

拽神 DrissionPage 官方文档 DrissionPage官网 拽神 基本介绍 拽神是目前国内唯一开源基于浏览器CDP协议的 自动化工具。(以前也有类似工具,但是都是默默挣钱&#

拽神 DrissionPage 官方文档 DrissionPage官网

拽神 基本介绍

拽神是目前国内唯一开源基于浏览器CDP协议的 自动化工具。(以前也有类似工具,但是都是默默挣钱,没有开源的。)

DrissionPage 初始是基于 selenium 开发的,但随着新版的开发,基于WebDriver协议的设计逐渐被替换,改为基于浏览器CDP协议进行自动化浏览器操作。和PuppeteerPlaywright 一样。

同样基于CDP协议的自动化工具PuppeteerPlaywright ,他们分别是 Google 的 Chrome DevTools 团队开发和微软的开发团队开发的。而拽神的作者g1879相比,看起来只是个人开发者,就非常拽了。

适配

适配Windows、Linux 和 Mac,需要 python 版本:3.6 及以上

作为爬虫的优缺点

优点:开发效率高(逆向难度大的网站,开发效率高就相当于人工成本低。)

缺点:爬取效率低,代理费用高,机器成本高。(主要是爬取效率低)

一般在数据量较少(比如:十万数据),一次性任务、逆向难度大的時候考虑。

基本模式

有浏览器模式和页面对象模式。

页面对象模式比较特殊,是一个使用使用Session(requests 库)对象的页面,效率比浏览器模式高很多。相比浏览器模式,缺点是直接无法获取ajax数据,因为无法直接进行浏览器交互。一般只能获取有url能直接访问的这种数据。相比requests库,可以跳过请求响应逆向阶段,直接获取页面结果。

功能介绍

支持挂代理、多线程、接管浏览器功能(比如先登录 后自动化接手)、传统元素交互、无头浏览器、监听网络包。详情可看官方文档。

监听网络包

这个功能是浏览器模式获取Ajax数据使用的。

如果使用浏览器自动化发起Ajax请求,可能存在数据不全、加载响应不及时、难以判断加载完成等问题。 而如果我们可以拿到浏览器收发的数据包,根据数据包状态判断下一步操作,甚至直接获取数据,岂不是爽爆了? DrissionPage 每个页面对象(包括 Tab 和 Frame 对象)内置了一个监听器,专门用于抓取浏览器数据包。 可以提供等待和捕获指定数据包,实时返回指定数据包功能。

注意:该功能确实很特别,但是即使监听到了请求包返回,也不能完美说明数据返回,比如翻页获取Ajax数据,监听到了数据返回,但是接口可能会返回空数据,或者请求频率太快等信息,造成数据丢失。 需要开发者自行处理异常捕获,比如说,Ajax数据异常,让他休息十五秒后翻页回到上一页,再重新向下一页翻页。 还有点击异常也需要开发者自行捕获,并进行重试。

更多的异常处理算是自动化爬取数据的小缺陷了,拽神也无法避免。

tab.listen.start('https://www.ajax/')  # 开始监听,指定获取包含该文本的数据包
                    while True:
                        for _ in range(5):
                            try:
                                tab.ele('x://i[@class="el-icon-arrow-right pointer"]').click()  # 点击下一页
                                res = tab.listen.wait(timeout=10, raise_err=True)  # 等待并获取一个数据包
                                if '您的访问频率过快,请稍后再试' in tab.html:
                                    logger.info('访问评率过快丢失数据,休息15秒后返回上一页。')
                                    time.sleep(15)
                                    tab.ele('x://i[@class="el-icon-arrow-left pointer"]').click()
                                    time.sleep(5)
                                break  # 如果执行成功,跳出循环,不再重试
                            except:
                                logger.info(f"翻页出现异常,正在进行第{_ + 1}次重试...")
                        else:
                            raise Exception('五次翻页失败')

拽神代理

只支持 120.42.248.178:16042 这种格式的普通短效、长效代理,传入这个参数即可挂http https。 不支持隧道代理。

浏览器模式挂代理

挂代理这部分稍微复杂一点,提供代码供参考,以下是挂代理多线程请求的代码示例。

# coding=utf-8
import vthread
from DrissionPage import ChromiumOptions
from DrissionPage import Chromium



def super_proxy(proxy_type="random"):
    """
    """
    try:
        return proxy
    except Exception as err:
        print(f'获取代理失败:{format_exc()}')

@vthread.pool(5)
def te(url):
    page = get_proxy_page()
    tab = page.new_tab()
    tab.get(url)  # 访问网
    print(tab.html)
    tab.close()

def get_proxy_page():
    """
    获取代理页面(浏览器驱动方式)
    后续需要 tab = page.new_tab() 等方式打开小页面
    :return:
    """
    co = ChromiumOptions()
    x = super_proxy()
    co.set_proxy(x)
    page = Chromium(co)
    return page

if __name__ == '__main__':
    url2 = 'http://httpbin/ip'
    for i in range(10000):
        te(url2)

页面对象模式挂代理

挂代理这部分稍微复杂一点,提供代码供参考,以下是挂代理多线程请求的代码示例。

# coding=utf-8
import vthread
from DrissionPage import SessionPage

def parse_detail(url,html):
    tree = etree.HTML(html)

def get_proxy_page():
    """
    获取代理页面(页面访问模式)
    :return:
    """
    page = SessionPage()
    d1 = super_proxy()
    page.set.proxies(http=d1['http'], https=d1['https'])
    return page

@vthread.pool(15)
def detail_crawl(url):
    for i in range(6):
        try:
            page = get_proxy_page()
            page.get(url)
            parse_detail(url,page.html)
            break
        except Exception as e:
            print('出错啦')
    else:
        pass


if __name__ == '__main__':
    # a.crawl()
    url_test = 'https://www.test/'
    for i in range(40000):
        detail_crawl(url_test)

发布者:admin,转转请注明出处:http://www.yc00.com/web/1741053799a4298421.html

相关推荐

  • selenium的新一代替代品---DrissionPage

    😀 **selenium的新一代替代品---DrissionPage 新一代自动化利器** !https:pic2.zhimgv2-326357efbfd6c494c732ae10ed2d3a83_1440w.

    1月前
    60
  • DrissionPage设置启动浏览器为edge

    1.查看浏览器启动路径 在浏览器地址栏输入下面地址,拿到可执行文件的路径 。 edge:version 2.替换路径 打开DrissionPage._configs. chromium_options.py文件

    1月前
    40
  • DrissionPage浏览器配置

    DrissionPage浏览器配置 一、报错情况 raise FileNotFoundError(无法找到浏览器可执行文件路径,请手动配置。) FileNotFoundError: 无法找到浏览器可执行文件路径&am

    1月前
    40
  • 拽神(DrissionPage)使用介绍

    拽神 DrissionPage 官方文档 DrissionPage官网 拽神 基本介绍 拽神是目前国内唯一开源基于浏览器CDP协议的 自动化工具。(以前也有类似工具,但是都是默默挣钱&#

    22天前
    40
  • DrissionPage 启动一个全新的浏览器

    from DrissionPage import ChromiumPage, ChromiumOptionscoChromiumOptions().auto_port()pageChromiumPage(co)page.get

    21天前
    00

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信