一、手动安装chromium,而后再指定程序里面的executablePathcss
# 于requests-html源代码在714行中加入 executablePath=’path/to/the/chromium‘
二、html
from requests_html import HTMLSession url = 'https://httpbin.org/get' session = HTMLSession() res = session.get(url = url) res.html.render() print(res.html.html)
三、在输入navigator.userAgent 就能够看到浏览器的请求头,把他复制到--user-agent以后,python
注意不要有空格。 --nosand 是以最高权限git
url = 'https://httpbin.org/get' session = HTMLSession( browser.args = [ '--no-sand', '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"' ]) res = session.get(url = url) res.html.render() print(res.html.html)
kwargs = { 'headless': False, 'devtools': False, // 打开开发者工具 'ignoreDefaultArgs': // 忽略默认配置 'userDataDir' :'./userdata', //设置用户目录,保存cookie 'args': [ '--disable-extensions', '--window-size={width},{height}', '--hide-scrollbars', '--disable-bundled-ppapi-flash', '--mute-audio', //页面静音 '--no-sandbox', '--disable-setuid-sandbox', '--disable-gpu', '--enable-automation', ], 'dumpio': True, }
str
类型,若是有值,返回JS执行脚本的返回值True
,若是为False,若是为False
,就会从内存中加载内容False
,若是为True
,就能够经过r.html.page
和页面进行交互script = """ () => { return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight, deviceScaleFactor: window.devicePixelRatio, } } """ from requests_html import HTMLSession url = 'https://httpbin.org/get' session = HTMLSession( browser_args=[ '--no-sand', '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"' ] ) res = session.get(url = url) r = res.html.render(script=script) print(r)
'''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => undefined } }) }'''
注意修改源码:github
- options `<object>` 可选配置 - path `<string>` 截图保存路径。截图图片类型将从文件扩展名推断出来。若是是相对路径,则从当前路径解析。若是没有指定路径,图片将不会保存到硬盘。 - type `<string>` 指定截图类型, 能够是 jpeg 或者 png。默认 'png'. - quality `<number>` 图片质量, 可选值 0-100. png 类型不适用。 - fullPage <boolean> 若是设置为true,则对完整的页面(须要滚动的部分也包含在内)。默认是false - clip `<object>` 指定裁剪区域。须要配置: - x `<number>` 裁剪区域相对于左上角(0, 0)的x坐标 - y `<number>` 裁剪区域相对于左上角(0, 0)的y坐标 - width `<number>` 裁剪的宽度 - height `<number>` 裁剪的高度 - omitBackground <boolean> 隐藏默认的白色背景,背景透明。默认不透明 - encoding `<string>` 图像的编码能够是 base64 或 binary 默认为二进制
import asyncio from requests_html import HTMLSession url = 'https://httpbin.org/get' session = HTMLSession( browser_args=[ '--no-sand', '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"' ] ) res = session.get(url = url) script = """ () => { return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight, deviceScaleFactor: window.devicePixelRatio, } } """ try: res.html.render(script=script,sleep = 1,keep_page = True) async def main(): await res.html.page.screenshot({'path':'1.png'}) # 传入参数用字典path 表明路径 值为你要存放的路径 asyncio.get_event_loop().run_until_complete(main()) finally: session.close()
js1 = '''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => undefined } }) }''' js4 = '''() =>{Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']}); }''' await page.evaluate(js1) ## 更改webdriver await page.evaluate(js4) ##更改语言
设置页面大小:web
page.setViewport({'width':1336,'height':768})
若是不指定任何url,此方法返回当前页面域名的cookie。若是指定了url,只能返回指定的cookieapi
selector `<string>` 要输入内容的元素选择器。若是有多个匹配的元素,输入到第一个匹配的元素。 - text `<string>` 要输入的内容 - options `<object>` - delay `<number>` 每一个字符的延时。单位是毫秒,默认是0
selector <string> 要给焦点的元素的选择器selector。若是有多个匹配的元素,焦点给第一个元素
selector<string>: 要hover的元素的选择器。若是匹配多个,hover第一个
- selectorOrFunctionOrTimeout <string|number|function> 选择器, 方法 或者 超时时间 - options `<object>` 可选的等待参数 ...args <...Serializable|JSHandle> 传给 pageFunction 的参数 若是 selectorOrFunctionOrTimeout 是 string, 那么认为是 css 选择器或者一个xpath, 根据是否是'//'开头, 这时候此方法是 page.waitForSelector 或 page.waitForXPath的简写 若是 selectorOrFunctionOrTimeout 是 function, 那么认为是一个predicate,这时候此方法是page.waitForFunction()的简写 若是 selectorOrFunctionOrTimeout 是 number, 那么认为是超时时间,单位是毫秒,返回的是Promise对象,在指定时间后resolve 不然会报错
详细的键盘键名语法浏览器
语法:cookie
res.html.page.keyboard.XXX
<string>
按下的键名, 好比 ArrowLeft. 一个包含全部键名的列表见 USKeyboardLayout.-<object>
- text <string>
若是指定,则使用此文本生成输入事件.<string>
要释放的键的键名, 例如 ArrowLeft<string>
按下的键名, 好比 ArrowLeft.<object>
- text <string>
若是指定,则使用此文本生成输入事件。 - delay <number>
在 keydown 和 keyup 间隔的时间, 以毫秒为单位. 默认为 0。text <string>
要输入到焦点元素中的文本。session
options <object>
- delay <number>
按键间隔的时间, 以毫秒为单位. 默认为 0。
page.keyboardtype('喜欢你啊',{‘delay’:100})
r.html.page.mouse.XXX
<number>
<number>
<object>
<string>
left ,right 或 middle,默认是 left。<number>
默认是 1。见 UIEvent.detail。<number>
在毫秒内且在 mousedown 和 mouseup 之间等待的时间。 默认为0。<object>
<string>
left,right 或 middle,默认是 left。<number>
默认是 1。<object>
<string>
left,right,或 middle,默认是 left。<number>
默认是 1。