我试图用 Puppeteer 解析的 HTML 看起来像这样:
<ul>
<li class="title"> item 1 </li>
<li class="title hide"> item 1 </li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我正在访问这样的li
元素:
await page.$$eval("ul > li.title", nodes =>
nodes.map(element => {
return {
//some attributes
};
})
);
Run Code Online (Sandbox Code Playgroud)
扩展的结果是只检索没有class=hide
. 不幸的hide
是,除了 之外还有一个类title
,它由所有<li>
元素共享。
如何重构 Puppeteer 代码以排除具有hide
类的元素?
我有使用puppetteer
的page
对象评估并返回一些数据的函数。
我想编写一个单元测试,jest
以检查是否page.evaluate()
采用了指定参数
这是功能
async function cinemasfromState(page, state) {
const CINEMA_SELECTOR = `div[data-state=$[STATE]] div.top-select-option a.eccheckbox`;
let res = await page.evaluate(
(elementPath, state) => {
let results = Array.from(document.querySelectorAll(elementPath)).map(
function(cin, index) {
return {
//Stuff
};
return result;
},
{ state }
);
},
CINEMA_SELECTOR.replace("$[STATE]", state),
state
);
return res;
}
Run Code Online (Sandbox Code Playgroud)
以下是我的测试结果
describe("cinemasfromState", () => {
let page_mock = {
click: jest.fn(() => Promise.resolve()),
evaluate: jest.fn((selector, state) => Promise.resolve())
};
test("page.evaluate called correctly ", …
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的嵌套数组
const names= [[{name: "John"}, {name: "Mary"}],
[{name: "Paul"}, {name: "Peter"}]];
Run Code Online (Sandbox Code Playgroud)
我想注入country
到嵌套对象中
const country = {country :"USA"}
Run Code Online (Sandbox Code Playgroud)
这样输出看起来像
[{name: "John", country : "USA"}, {etc} ,{etc} ]
Run Code Online (Sandbox Code Playgroud)
代码的想法是这样的
const combined = names.map((map)=>
Object.assign({},
country,
/*something to extract name from nested array names*/),
{country}
)
Run Code Online (Sandbox Code Playgroud)
有什么建议我可以如何将对象传播到嵌套数组中以形成所需的输出?
如果可以通过其他方式改进代码,也请告诉我
我有以下 HTML 结构
<div class ="container" id= "12">
<div class="details" desc-type= "multiline">
<a href="#">
<div class="description"> Some Description </div>
</a>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码抓取这个
const SELECTOR =
"div.container";
const movies = await page.$$eval(
SELECTOR,
nodes =>
nodes.map(element => {
return {
movieID: element.getAttribute("id"),
};
} )
);
Run Code Online (Sandbox Code Playgroud)
如何修改上面的代码,这样我可以阅读desc-type= "multiline"
和innerText
的<div class="description">
?