TA的每日心情 | 无聊 2024-11-5 10:03 |
---|
签到天数: 77 天 连续签到: 1 天 [LV.6]测试旅长
|
2#
楼主 |
发表于 2024-9-14 10:52:44
|
只看该作者
五、DrissionPage 的应用实战
(一)网页自动化测试
DrissionPage 在网页自动化测试中表现出色。例如,可以模拟用户在网页上的各种操作,如点击按钮、填写表单、验证页面元素等。假设我们要测试一个电商网站的购物流程,可以使用 DrissionPage 来实现以下步骤:
打开电商网站页面,使用page = ChromiumPage()创建页面对象,然后通过page.get('电商网站网址')访问页面。
定位到商品搜索框,使用page.ele('#search_box').input('商品名称')输入要搜索的商品名称,接着点击搜索按钮page.ele('@value=搜索').click()。
从搜索结果中定位到目标商品,如product = page.ele('.product_item'),然后点击商品链接进入商品详情页。
在商品详情页,验证商品信息是否正确,如价格、描述等。可以使用page.ele('#price').text获取商品价格,page.ele('#description').text获取商品描述。
点击加入购物车按钮,page.ele('@value=加入购物车').click(),然后验证购物车图标是否显示正确的商品数量。
通过这样的自动化测试,可以快速、准确地验证网页的功能是否正常,提高测试效率和质量。
(二)数据抓取
DrissionPage 在数据抓取方面具有很大的优势。它可以无缝切换 Selenium 的浏览器驱动和 Requests 的会话,根据不同的需求选择最合适的方式进行数据抓取。例如,对于静态页面数据抓取,可以使用 Requests 的会话模式,速度快、效率高。而对于需要渲染 JavaScript 生成的动态内容的页面,可以使用 Selenium 的浏览器驱动模式,确保能够获取完整的页面数据。
具体方法如下:
1.对于静态页面数据抓取,可以使用以下代码:
- <font face="微软雅黑" size="3"> from DrissionPage import SessionPage
- page = SessionPage()
- page.get('静态页面网址')
- data = page.eles('.data_item')
- for item in data:
- print(item.text)</font>
复制代码 2.对于动态页面数据抓取,可以使用以下代码:
- <font face="微软雅黑" size="3"> from DrissionPage import WebPage
- page = WebPage()
- page.get('动态页面网址')
- page.wait_for_element('#data_container')
- data = page.ele('#data_container').text
- print(data)</font>
复制代码 (三)网页动态数据抓取
处理动态网页数据抓取是 DrissionPage 的强项之一。动态网页通常需要通过 JavaScript 加载数据,使用 DrissionPage 的浏览器模式可以有效地解决这个问题。例如,在抓取一些新闻网站的实时新闻时,页面会不断更新新的新闻内容,这就需要使用 DrissionPage 的浏览器模式来等待页面加载完成并抓取数据。
具体步骤如下:
使用page = WebPage()创建页面对象,然后通过page.get('新闻网站网址')访问页面。
使用page.wait_for_element('#news_container')等待新闻容器元素加载完成。
使用news_items = page.eles('.news_item')获取所有新闻项元素。
遍历新闻项元素,提取新闻标题、内容和发布时间等信息。例如:
- <font face="微软雅黑" size="3"> for item in news_items:
- title = item.ele('.title').text
- content = item.ele('.content').text
- time = item.ele('.time').text
- print(f'标题:{title},内容:{content},发布时间:{time}')</font>
复制代码
六、超越 Selenium 的其他神器
除了 DrissionPage 之外,还有一些其他的自动化爬虫神器也在逐渐超越 Selenium,其中 Pyppeteer 就是一个非常出色的代表。
Pyppeteer 是 Puppeteer 的 Python 版本,它操作的是一个类似 Chrome 的 Chromium 浏览器。Chromium 是相当于 Chrome 的开发版,包含很多新功能。当我们第一次运行 Pyppeteer 的时候,如果 Chromium 没有安装,程序会自动帮我们安装和配置,省去了环境配置这一步。
安装 Pyppeteer 非常简单,使用pip install pyppeteer命令就能完成安装。由于 Pyppeteer 采用了 async 机制,所以必须使用 Python 3.5 及以上版本。
在使用时,我们可以通过以下代码来抓取豆瓣电影排行榜的数据:
- <font face="微软雅黑" size="3">import asyncio
- from pyppeteer import launch
- from lxml import etree
- async def main():
- browser = await launch()
- page = await browser.newPage()
- await page.goto('https://movie.douban.com/chart')
- await page.waitForXPath('//table//a[@title]')
- doc = etree.HTML(await page.content())
- names = [element.attrib['title'] for element in doc.xpath('//table//a[@title]')]
- print('Names:', names)
- await browser.close()
- asyncio.get_event_loop().run_until_complete(main())</font>
复制代码
这段代码的大体意思是访问网站,然后等待特定节点加载出来,再通过 xpath 从网页源码中解析出电影名并输出,最后关闭 Pyppeteer。
Pyppeteer 还有很多其他的优势。例如,它在执行效率方面得到了大幅提升,因为它是基于 asyncio 构建的,所有属性和方法几乎都是 coroutine 对象,在构建异步程序的时候非常方便,天生就支持异步运行。
在进行基金爬取实战中,对比顺序执行和异步执行的效率,异步执行要快很多。例如,顺序执行获取 50 支基金近 20 个交易日的净值数据用时为 12.08 秒,而异步执行仅用时 2.18 秒,快了 6 倍。如果需要爬取的工作量比较大,异步执行的优势会更加明显。
总之,Pyppeteer 作为超越 Selenium 的自动化爬虫神器之一,以其简洁的语法、自动的环境配置和高效的异步执行能力,为开发者提供了更多的选择。
七、总结与展望
(一)总结
DrissionPage 作为一款超越 Selenium 的自动化爬虫神器,具有众多显著的特点和优势。
在语法设计方面,简洁明了,对新手友好,大大降低了学习成本。其高效稳定的性能表现,如快速的运行速度、内置的等待和自动重试功能,使得程序在面对不稳定网络时更加稳定可靠。多浏览器支持以及强大的跨平台能力,为开发者提供了更多的选择和便利。在元素定位与操作、表单操作与文件上传、页面导航与跳转以及 JavaScript 执行等方面,DrissionPage 提供了丰富的方法和便捷的 API,使得开发者能够高效地完成各种网页自动化任务。
在应用场景方面,无论是网页自动化测试、数据抓取还是网页动态数据抓取,DrissionPage 都能发挥出强大的作用。它能够模拟用户在网页上的各种操作,快速准确地验证网页功能;可以根据不同需求选择最合适的方式进行数据抓取,确保获取完整的页面数据;在处理动态网页数据抓取时,能够有效地等待页面加载完成并抓取数据。
(二)展望
随着互联网技术的不断发展,网页自动化和数据抓取的需求将持续增长。DrissionPage 在未来有着广阔的发展前景。
一方面,DrissionPage 可以不断优化和扩展其功能。例如,进一步提高运行速度和稳定性,增强对更多复杂网页的兼容性,增加更多的元素定位和操作方法,以及提供更强大的表单操作和文件上传功能。同时,可以加强与其他工具和框架的集成,为开发者提供更加全面的解决方案。
另一方面,DrissionPage 可以持续改进其用户体验。优化官方文档和学习资源,提供更多的实战案例和教程,帮助开发者更快地掌握和使用该工具。加强社区建设,鼓励开发者之间的交流和分享,共同推动 DrissionPage 的发展。
总之,DrissionPage 以其独特的优势和不断创新的精神,将在网页自动化和数据抓取领域继续发挥重要作用,为开发者带来更多的惊喜和便利。
|
|