一、手動安裝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。