Loading

pyppeteer与selenium对比

pyppeteer与selenium对比

分析来源

requests 爬取下来的只能是服务器端网页的源码,这和浏览器渲染以后的页面内容是不一样的。因为,真正的数据是经过 JavaScript 执行后,渲染出来的,数据来源可能是 Ajax,也可能是页面里的某些 Data,或者是一些 ifame 页面等。不过,大多数情况下极有可能是 Ajax 接口获取的。

很多情况我们需要分析 Ajax请求,分析这些接口的调用方式,通过抓包工具或者浏览器的“开发者工具”,找到数据的请求链接,然后再用程序来模拟。但是,抓包分析流的方式,也存在一定的缺点。

一是:因为有些接口带着加密参数,比如 token、sign 等等,模拟难度较大;

二是:抓包的方式只适合量小的情况。如果有一百、一千个,甚至五千、一万个网站要处理时,该如何处理?还一个一个分析数据流?一个一个去抓包吗?

由于Selenium流行已久,现在稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容易就可以判断出是真人访问还是webdriver。虽然也可以通过中间代理的方式进行js注入屏蔽webdriver检测,但是webdriver对浏览器的模拟操作(输入、点击等等)都会留下webdriver的标记,同样会被识别出来,要绕过这种检测,只有重新编译webdriver,麻烦自不必说,难度不是一般大。

由于Selenium流行已久,现在稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容易就可以判断出是真人访问还是webdriver。虽然也可以通过中间代理的方式进行js注入屏蔽webdriver检测,但是webdriver对浏览器的模拟操作(输入、点击等等)都会留下webdriver的标记,同样会被识别出来,要绕过这种检测,只有重新编译webdriver,麻烦自不必说,难度不是一般大。

学习笔记

基本操作

打开网页

   executable_path=r'C:\Users\txmmy\AppData\Local\Google\Chrome\Application\chrome.exe'
browser=await launch(headless=False,executable_path=executable_path)
page=await  browser.newPage()
await page.goto('https://www.baidu.com/')

执行pyppeteer:

import asyncio
from pyppeteer import launch
if __name__ == '__main__':
    asyncio.get_event_loop().run_until_complete(main())

来个实例

实例一、搜索百度关键字

    #下拉滚动条
    await  page.evaluate('window.scrollBy(0,window.innerHeight)')
    await asyncio.sleep(random.random() * random.randint(3, 5))
    #提取搜索第一页标题、网址链接 #JX evaluate??
    title_element = await page.Jx('//*[contains(@class,"result c-container")]//h3/a')
    for t in title_element:
        title = await page.evaluate('t => t.textContent', t)
        link = await (await t.getProperty('href')).jsonValue()
    #清空搜索框的关键字
    await page.evaluate('document.querySelector("input[id=kw]").value=""')

pager.Jx

page.evaluate

page.getPorperty

文档摘要

posted @ 2024-03-30 00:08  踩坑大王  阅读(133)  评论(0)    收藏  举报