requests-html 简介

GiHub 项目地址

Requests库是 Python 中一款流行的 HTTP 请求库,用于简化 HTTP 请求的发送和处理,也是我们在使用 Python 做接口自动化测试时,最常用的第三方库。requests-htmlRequests库作者的又一力作,它是基于现有的框架 PyQueryRequestslxmlbeautifulsoup4 等库进行了二次封装。集 HTTP 请求、HTML 解析、JavaScript 渲染等功能于一身,是爬虫的好伴侣。

但是需要提醒的是,这个库的最后更新时间是2019年

安装

pip install requests-html

使用

请求

from requests_html import HTMLSession

session = HTMLSession()

# 参数
browser.args = [
    '--no-sand',
    '--user-agent=XXXXX'
]

# 响应对象 = session.request(......)

# 响应对象 = session.get(......)

# 响应对象 = session.post(......)

响应

r.url
# 属性和requests模块一毛一样

解析

  • html 对象属性
r.html.absolute_links    # /xx/yy   -->    http://www....../xx/yy
r.links                 # 路径原样
r.base_url              # 网站基础路径
r.html                  # 解码过的响应内容,相当于requests中的r.text
r.text
r.encoding = 'gbk'     # 控制的是r.html.html的解码格式
r.raw_html             # 相当于requests中的r.content
r.pq
  • html 对象方法
r.html.find('css选择器')             # [element对象, element对象...]
r.find('css选择器', first = True)     # 对一个element对象
r.xpath('xpath选择器')
r.xpath('‘xpath选择器', first = True)

r.search('模板')                  # result对象(匹配第一次)
# 模板
r.search('xxx{}yyy{}')[0]
r.search('xxx{name}yyy{pwd}')['name']

r.search_all('模板')             # 匹配所有, [result对象, result对象,....]
r.render(.....)                   # 渲染后的结果去替换r.html.html

# 参数
script:"""
( ) => {
    js代码
    js代码
    }
"""

scrolldown:n
sleep:n
keep_page:True    # True/False

# 绕过网站对webdriver的检测:
'''
() =>{
    Object.defineProperties(navigator,{
        webdriver:{
            get: () => undefined
            }
        })
    }
'''
  • Element 对象方法及属性
# el为element对象
el.absolute_links
el.links
el.text
el.html
el.attrs
el.find('css选择器')
el.search('模板')
el.search_all('模板')
  • 与浏览器交互(r.html.page.XXX)
async def xxx():
    await r.html.page.XXX
    session.loop.run....(xxx())
    .screenshot({'path': 路径, 'clip': {'x': 1, 'y': 1, 'width': 100, 'height': 100}})
    .evaluate('''() =>{js代码}}''')
    .cookies()
    .type('css选择器','内容',{'delay':100})
    .click('css选择器', {'button': 'left', 'clickCount': 1, 'delay': 0})
    .focus('css选择器')
    .hover('css选择器')
    .waitForSelector('css选择器')
    .waitFor(1000)
  • 键盘事件(r.html.page.keyboard.XXX)
.down('Shift')
.up('Shift')
.press('ArrowLeft')
.type('喜欢你啊', {'delay': 100})
  • 鼠标事件(r.html.page.mouse.XXX)
.click(x, y, {
    'button':'left',
    'click': 1,
    'delay': 0
})
.down({'button':'left'})
.up({'button':'left'})
.move(x,y,{'steps':1})

标签: 暂无标签