小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

新一代python爬蟲利器Playwright——自動(dòng)寫代碼!

 zZ華 2022-01-22

Image

來源:Python 技術(shù)「ID: pythonall」

Image

Playwright 是微軟出的一款自動(dòng)化測(cè)試工具,在做爬蟲的時(shí)候,只需要點(diǎn)點(diǎn)點(diǎn)操作就能將代碼錄下來,用 python 腳本運(yùn)行。有非常強(qiáng)大的 API,完全滿足爬蟲的需要。

安裝

需要安裝 playwright 第三方模塊和Chromium、Firefox、WebKit等瀏覽器的驅(qū)動(dòng)文件。

pip install playwright

python -m playwright install

錄制

playwright 在抓取頁面的時(shí)候是不需要太多寫代碼的,錄制就完事了。首先看看有哪些命令參數(shù):

python -m playwright codegen --help

Image

這里有好幾個(gè)選項(xiàng):

  • -o:輸出的代碼文件的名稱
  • --target:語言:默認(rèn)為 python,python-async 自動(dòng)生成的是異步模塊的代碼
  • -b:用的瀏覽器
  • --time:頁面超時(shí)時(shí)間

將腳本文件存放在 D 盤的 playwright_demo.py 中。

# 命令行鍵入
python -m playwright codegen -o D:\playwright_demo.py

打開 D:\playwright_demo.py 在代碼中可以看到:

browser = playwright.chromium.launch(headless=False)

headless 是 False 的時(shí)候會(huì)出現(xiàn)瀏覽器,如果是 True 就以沒有瀏覽器的方式啟動(dòng)。

Page

Page 就是單獨(dú)的一個(gè)瀏覽器 tab 標(biāo)簽(第一種)創(chuàng)建,也可以是 a 標(biāo)簽中 target='_blank' 打開的 tab 標(biāo)簽(第二種)創(chuàng)建。

# 1
page = context.new_page()

page.goto('https://www.jd.com/')

# 2
with page.expect_popup() as popup_info:
    page.click('[aria-label=\'OPPO A96 8+256GB 琉璃幻彩 小星環(huán) 呼吸燈 高通八核5G芯片 33W快充 OLED超清護(hù)眼屏 拍照5G手機(jī)oppoa96\'] >> text=¥')
page3 = popup_info.value

page3.wait_for_load_state()
print(page3.title())

方法

page 有多個(gè)常用的方法:on、goto、fill、inner_html、content、query_selector、query_selector_all 等等。

一、goto():用于跳轉(zhuǎn)網(wǎng)址。

二、on():事件的監(jiān)聽,可以用來監(jiān)聽瀏覽器中發(fā)生的任何事件,如:close、console、download、request、response 等等。

用來監(jiān)聽 request 請(qǐng)求,打印出 post 的提交數(shù)據(jù)和請(qǐng)求地址:

def on_request(request):
    print('--------start---------')
    print(request.url)
    print(request.post_data)
    print('--------start---------')

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    
    # Open new page
    page = context.new_page()

    page.on('request', on_request)

    page.goto('https://www.baidu.com/')

    context.close()
    browser.close()

用來監(jiān)聽 response 響應(yīng),并打印出百度中的 png 結(jié)尾的圖片:

from playwright.sync_api import Playwright, sync_playwright
import time

def on_response(response):
    if '.png' in response.url:
        with open('D:\image\\'+str(int(time.time()))+ '.png''wb'as f:
            f.write(response.body())

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    
    # Open new page
    page = context.new_page()

    page.on('response', on_response)

    page.goto('https://www.baidu.com/')


    context.close()
    browser.close()

三、fill() 用于填寫 input 框,在百度搜索框中寫入 111:

page.fill('input[name=\'wd\']''111')

四、inner_html()、content() 獲取頁面源代碼:

page.inner_html('//html')

page.content()

五、query_selector 選擇一個(gè)節(jié)點(diǎn),當(dāng)匹配到多個(gè)節(jié)點(diǎn),只會(huì)返回第一個(gè),獲取 class='toindex' 的文本:

handle = page.query_selector('.toindex')
print(handle.text_content())

六、query_selector_all 選擇所有的節(jié)點(diǎn),獲取百度頁面上所有 input 的 name:

handles = page.query_selector_all('input')
for item in handles:
    print(item.get_attribute('name'))

選擇器

Text 選擇器

以 jd 網(wǎng)站為例:下面兩行可以選擇登錄或者注冊(cè)。

page.click('text=你好,請(qǐng)登錄')
    
page.click('text=免費(fèi)注冊(cè)')

text=后面也可以寫正則表達(dá)式,比如:text=/Log\s*in/i 就可以匹配 Login 或者 log IN

如果不確定是否存在某個(gè) text 也可以使用 :has-text('Log')

CSS 選擇器

CSS 選擇器就是使用的默認(rèn) CSS 引擎。Playwright 也自定義了一些偽類::visible、:text、:has 等等。

用 id 的方式登錄到京東網(wǎng)站:

page.click('#loginsubmit')

根據(jù)節(jié)點(diǎn)的屬性選擇:

page.click('[aria-label='搜索']')

根據(jù) CSS 和文本選擇:

page.click('a:has-text('電腦')')

page.click('[aria-label=\'OPPO A96 8+256GB 琉璃幻彩 小星環(huán) 呼吸燈 高通八核5G芯片 33W快充 OLED超清護(hù)眼屏 拍照5G手機(jī)oppoa96\'] >> text=¥')

根據(jù) CSS 和子節(jié)點(diǎn)選擇,li、img 是標(biāo)簽, seckill_mod_goods_link_img 是 img 的 class 值:

page.click('li:has(img.seckill_mod_goods_link_img)')

XPath

Playwright 支持 XPath 選擇元素,自動(dòng)化錄制 python 腳本一般是使用的 text 而不是 Xpath。

page.click('//span[contains(@class, 'spinner__loading')]|//div[@id='confirmation']')

N-th

N-th 選擇第幾個(gè):

點(diǎn)擊第一個(gè)按鈕

page.click('button >> nth=0')

點(diǎn)擊最后一個(gè)按鈕

page.click('button >> nth=-1')

總結(jié)

本文介紹了 Playwright 的用法和部分 api,抓取一個(gè)網(wǎng)站主要的操作就是獲取 url 地址、參考 post 數(shù)據(jù)、request、response、元素,本篇文章都有涉及。還有大量的 api 可以參考官方網(wǎng)站。

參考

  • https://v/python/docs/api/class-playwright

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多