gpt4 book ai didi

javascript - 单击每个元素然后用 horseman 抓取

转载 作者:搜寻专家 更新时间:2023-10-31 23:53:20 24 4
gpt4 key购买 nike

我正在使用一个名为 horseman 的 node.js 模块从一个包含 JavaScript 的网站上抓取一些数据。我无法弄清楚如何单击每个 span 元素,如果它包含其中的某个元素,在这种情况下是表。这将扩展该元素并生成可用于抓取的数据,这些数据现在是隐藏的。

我现在拥有的

horseman
.open(url)
.click("span.title")
.waitforSelector("span.title")
.then(scrape)

抓取功能:

function scrape() {

return new Promise(function (resolve, reject) {

return getLinks()
.then(function (newLinks) {

links = links.concat(newLinks);


if (links.length < 1)
return horseman

.then(scrape);

}
})
.then(resolve);
});
}

和 getlinks 函数()

var links = [];

function getLinks() {

return horseman.evaluate(function () {
var links = [];
$("span.title").each(function (item) {
var link = {
title: $(this).text()
};
links.push(link);
});
return links;
});
}

我最初的想法是,在 getLinks() 函数中,我可以检查项目是否包含表格,然后单击然后抓取,但不确定如何实现它。这个想法是扩展所有尚未扩展的 span 元素,这意味着数据是可见的并且能够被抓取。我在该做什么上遇到困难,所以任何帮助都会很棒!

最佳答案

以下代码:

    horseman
.open(url)
.click("span.title")
.waitforSelector("span.title")
.then(scrape)

...将无法工作,因为 .click() horseman Action 只针对单个元素。相反,您可以尝试使用以下适用于许多元素的代码:

    horseman
.open(url)
.evaluate(clickItems)
.waitforSelector("span.title XXX")
.then(scrape)

哪里:

  • XXX应该是 span.title 中内容的选择器(所以 waitForSelector 实际上会等待)。例如,让我们考虑这个标记:


    <span class="title"><!-- this is the clickable item -->
    <table>...</table>
    <div class="show-on-click">Blah blah</div>
    </span>

在上面的示例中,您将使用 .waitForSelector('span.item .show-on-click') .在数据出现之前,你必须找到哪个选择器不存在。 (或改用 .wait(1000))

  • clickItem 函数定义如下(我看到你使用 jQuery,所以我也会这样做)

    function clickItems() {
    var $items = $('span.title:has(table)');

    $items.each(function(index, $item) {
    $item.click();
    });
    }

注意:这将点击所有元素 span.title .您可以修改 click 元素以在每个 $item 中添加表存在测试,但我想如果其他点击没有执行任何操作,您可以忽略它。

关于javascript - 单击每个元素然后用 horseman 抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34053292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com