request_html模塊(下)

request_html模塊(下)

render方法:

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

render的參數:

  • retries 重試次數,默認爲8,
  • script,JS 腳本,可選參數,默認爲None,str類型,若是有值,返回JS執行腳本的返回值
  • wait 加載頁面前等待的秒數,防止超時,默認0.2秒,可選參數,浮點型
  • scrolldown,頁面滾動次數,整數,默認爲0,
  • sleep, 首次渲染以後暫停的秒數,接收整數,可選類型,默認爲0
  • reload 默認爲True,若是爲False,若是爲False,就會從內存中加載內容
  • keep_page,默認爲False,若是爲True,就能夠經過r.html.page和頁面進行交互

js注入實例1:

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)
js注入實例2 更改navigator.webdriver:
'''() =>{
    
           Object.defineProperties(navigator,{
             webdriver:{
               get: () => undefined
             }
           })
        }'''

注意修改源碼:github

img

img

與瀏覽器進行交互

page.screenshot([options])

- 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()

page.evaluate(pageFunction[, ...args])

  • pagFunction(function/string): 要在頁面實例上文中執行的方法
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) ##更改語言

page.setViewport()

設置頁面大小:web

page.setViewport({'width':1336,'height':768})

page.cookie()

若是不指定任何url,此方法返回當前頁面域名的cookie。若是指定了url,只能返回指定的cookieapi

page.type(selector, text[, options])

selector `<string>` 要輸入內容的元素選擇器。若是有多個匹配的元素,輸入到第一個匹配的元素。
- text `<string>` 要輸入的內容
- options `<object>`
    - delay `<number>` 每一個字符的延時。單位是毫秒,默認是0

page.click(selector[, options])

selector <string> 要給焦點的元素的選擇器selector。若是有多個匹配的元素,焦點給第一個元素

page.hover(selector)

selector<string>: 要hover的元素的選擇器。若是匹配多個,hover第一個

page.waitFor(selectorOrFunctionOrTimeout[, options[, ...args]])

- 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

keyboard.down(key[, options])

  • key <string> 按下的鍵名, 好比 ArrowLeft. 一個包含全部鍵名的列表見 USKeyboardLayout.-
  • options <object> - text <string> 若是指定,則使用此文本生成輸入事件.

keyboard.up(key)

  • key <string> 要釋放的鍵的鍵名, 例如 ArrowLeft

keyboard.press(key[, options])

  • key <string> 按下的鍵名, 好比 ArrowLeft.
  • options <object> - text <string> 若是指定,則使用此文本生成輸入事件。 - delay <number>在 keydown 和 keyup 間隔的時間, 以毫秒爲單位. 默認爲 0。

keyboard.type(text, options)

  • text <string> 要輸入到焦點元素中的文本。session

  • options <object> - delay <number> 按鍵間隔的時間, 以毫秒爲單位. 默認爲 0。

    page.keyboardtype('喜歡你啊',{‘delay’:100})

    鼠標事件

r.html.page.mouse.XXX

mouse.click(x, y, [options])

  • x <number>
  • y <number>
  • options <object>
  • button <string> left ,right 或 middle,默認是 left。
  • clickCount <number> 默認是 1。見 UIEvent.detail。
  • delay <number> 在毫秒內且在 mousedown 和 mouseup 之間等待的時間。 默認爲0。

mouse.down([options])

  • options <object>
  • button <string> left,right 或 middle,默認是 left。
  • clickCount <number> 默認是 1。

mouse.up([options])

  • options <object>
  • button <string> left,right,或 middle,默認是 left。
  • clickCount <number> 默認是 1。
相關文章
相關標籤/搜索