You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Puphpeteer v2.0.0中如何获取链接元素的文本与href属性

Puphpeteer 获取链接文本与href属性的解决方案

核心问题说明

你代码的问题在于对querySelectorXPath方法的使用不符合规范:该方法仅接收XPath选择器作为入参,返回的是DOM元素句柄对象,不支持直接传入JS函数获取属性值,需要结合evaluate方法读取元素的内容和属性。

完整修正代码

<?php

require_once '../vendor/autoload.php';

use Nesk\Puphpeteer\Puppeteer;
use Nesk\Rialto\Data\JsFunction;

$debug = true;

$puppeteer = new Puppeteer([
    'read_timeout' => 100,
    'debug' => $debug,
]);
$browser = $puppeteer->launch([
    'headless' => !$debug,
    'ignoreHTTPSErrors' => true,
]);

$page = $browser->newPage();
$page->goto('http://example.python-scraping.com/');
// 等待目标区域渲染完成,避免查询到空节点
$page->waitForSelector('#results');

// 批量获取结果区域链接的文本与href
$linkHandles = $page->querySelectorAllXPath('//*[@id="results"]/table/tbody/tr/td/div/a');
$links = [];
foreach ($linkHandles as $handle) {
    $linkInfo = $page->evaluate(
        JsFunction::createWithParameters(['node'])
        ->body("
            return {
                text: node.textContent.trim(),
                href: node.getAttribute('href')
                // 若需要完整绝对链接,可替换为 href: node.href
            };
        "),
        $handle
    );
    $links[] = $linkInfo;
}
// 输出所有链接信息
print_r($links);

// 获取单个分页链接的文本
$paginationHandle = $page->querySelectorXPath('//*[@id="pagination"]/a');
$singleText = $page->evaluate(
    JsFunction::createWithParameters(['node'])
    ->body('return node.textContent.trim();'),
    $paginationHandle
);
echo '分页文本:' . $singleText;

$browser->close();

性能优化方案

如果需要处理大量元素,可以直接在evaluate中完成DOM查询和取值逻辑,减少PHP与Node.js跨进程通信的次数,运行效率更高:

$links = $page->evaluate(JsFunction::createWithBody("
    const linkNodes = document.querySelectorAll('#results table tbody tr td div a');
    return Array.from(linkNodes).map(node => ({
        text: node.textContent.trim(),
        href: node.getAttribute('href')
    }));
"));

其他说明

需要读取元素的其他属性时,仅需要替换getAttribute的参数即可,例如node.getAttribute('class')可以获取元素的class属性值。

内容的提问来源于stack exchange,提问作者Carol.Kar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 06:48:03