python+playwright 学习-35.获取页面的完整 HTML 内容

前言

selenium 里面有个driver.page_source 可以获取整个html页面的内容,playwright里面也有类似的方法 使用 page.content()

page.content() 获取html内容

使用示例

from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()

    page.goto("https://www.cnblogs.com/yoyoketang/")
    print(page.content())

对于喜欢爬虫的小伙伴就可以去抓取页面上的内容了。

inner_html() 与 inner_text()

page.content() 是获取整个页面的HTML,如果我们只需获取某个元素的HTML,如下图

可以使用locator().inner_html() 方法获取

  • inner_html() 获取元素的整个html源码内容
  • inner_text() 获取元素的文本内容
from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()

    page.goto("https://www.cnblogs.com/yoyoketang/")
    # print(page.content())
    # 获取某个元素的HTML
    blog = page.locator('#blogTitle')
    print(blog.inner_html())
    print('-------------上海-悠悠----------------------')
    print(blog.inner_text())

text_content() 与 inner_text() 获取页面文本

text_content() 用来获取某个元素内所有文本内容,包含子元素内容,隐藏元素也能获取。
inner_text() 的返回值会被格式化 ,但是text_content()的返回值不会被格式化
最重要的区别 inner_text()返回的值, 依赖于页面的显示, text_content()依赖于代码的内容

from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()

    page.goto("https://www.cnblogs.com/yoyoketang/")
    # print(page.content())
    # 获取某个元素的HTML
    blog = page.locator('#blogTitle')
    # print(blog.inner_html())
    # print('-------------上海-悠悠----------------------')
    # print(blog.inner_text())
    print(blog.text_content())

all_inner_texts() 与 all_text_contents()

all_inner_texts() 和 all_text_contents() 也是用于获取页面上的文本,但是返回的是list列表

from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()

    page.goto("https://www.cnblogs.com/yoyoketang/")
    # print(page.content())
    # 获取某个元素的HTML
    blog = page.locator('#blogTitle')
    # print(blog.inner_html())
    # print('-------------上海-悠悠----------------------')
    # print(blog.inner_text())
    # print(blog.text_content())

    print(blog.all_inner_texts())
    print('-------------上海-悠悠----------------------')
    print(blog.all_text_contents())

在使用 Playwright 的时候,可以通过 `page.selectOption(selector, value)` 方法来选择下拉框中的选项。但是,如果下拉框是通过 picker-column-hook 实现的,这种方法可能不起作用。 在这种情况下,可以使用 Playwright 的 `page.dispatchEvent(selector, type, eventInit)` 方法来模拟触发事件来选择选项。具体步骤如下: 1. 找到 picker-column-hook 元素的父元素,通过 `page.$(selector)` 方法获取该元素。 2. 创建一个 `MouseEvent` 对象,用于触发事件。可以通过 `new MouseEvent(type, eventInit)` 方法创建该对象,其中 `type` 参数为事件类型,`eventInit` 参数为事件的初始化对象,可以指定事件的属性。 3. 调用 `page.dispatchEvent(selector, type, eventInit)` 方法,传入 picker-column-hook 父元素的选择器、事件类型和事件对象,模拟触发事件。 例如,假设 picker-column-hook 的 HTML 代码如下: ```html <div class="picker-column-hook"> <div class="picker-column-option" data-value="1">选项1</div> <div class="picker-column-option" data-value="2">选项2</div> <div class="picker-column-option" data-value="3">选项3</div> </div> ``` 要选择第二个选项,可以通过以下代码实现: ```python import time # 1. 获取 picker-column-hook 父元素 parent_selector = '.picker-column-hook' parent_element = await page.querySelector(parent_selector) # 2. 创建 MouseEvent 对象 type = 'mousedown' eventInit = { 'view': page, 'bubbles': True, 'cancelable': True, 'composed': True, 'clientX': 0, 'clientY': 0 } event = await page.evaluate_handle('new MouseEvent(arguments[0], arguments[1])', type, eventInit) # 3. 触发事件选择选项 option_selector = f'{parent_selector} [data-value="2"]' await parent_element.dispatchEvent('mousedown', eventInit) await page.waitForSelector(option_selector) await parent_element.dispatchEvent('mouseup', eventInit) await page.waitForTimeout(100) await page.click(option_selector) ``` 这段代码首先通过 `page.querySelector(selector)` 方法获取 picker-column-hook 父元素,然后创建一个 `MouseEvent` 对象,并调用 `page.dispatchEvent(selector, type, eventInit)` 方法模拟触发 `mousedown` 事件。接着,等待页面中出现选项二的元素,并模拟触发 `mouseup` 事件,最后等待一段时间后点击选项二元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值