gpt4 book ai didi

xpath - 操纵,,遍历xpath选择的链接

转载 作者:行者123 更新时间:2023-12-03 16:50:46 26 4
gpt4 key购买 nike

我是puppeteer的新手(通常对javascript不太了解),并且正在尝试编写一些基本功能来:


从XPath获取所有链接
循环浏览并单击那些链接
屏幕截图并保存页面的HTML
返回屏幕快照,然后将记录页面的HTML保存到其他页面的同一目录中,然后重新开始该过程


我得到的错误是:


评估失败:DOMException:无法在“文档”上执行“ querySelector”:“ 0”不是有效的选择器


这是我的代码:

enter image description here

我非常有信心所有代码都能正常工作,除了我在XPath上单击正确的问题之外。我从中获得这些信息的网站是:

https://hrlb.oregon.gov/bspa/licenseelookup/searchdir.asp?searchby=lastname&searchfor=a&stateselect=none&Submit=Search

码:

const records = await page.$x('//table[2]//tr[td[a]]//td[1]/a');
let int = 0;
for (let record in records) {
await Promise.all([
page.waitForNavigation(),
page.click(record)
]);

await Promise.all([makeDirectory('screenshots/item'+int), makeDirectory('screenshots/item'+int+'/base'), makeDirectory('screenshots/item'+int+'/record')]);
let recordPath = "screenshots/item"+int+"/record/record.html";
let basePath = "screenshots/item"+int+"/base/base.html";

page.screenshot({path: "screenshots/item"+int+"/record/record.png", fullPage: true});
let recordBody = await page.evaluate(() => document.body.innerHTML);
await saveHtml(recordPath, recordBody);

await Promise.all([
page.waitForNavigation(),
page.goBack()
]);

await page.screenshot({path: "screenshots/item"+int+"/base/base.png", fullPage: true});
let baseBody = await page.evaluate(() => document.body.innerHTML);
await saveHtml(basePath, baseBody);

int++;
console.log(record);
}

async function makeDirectory(path) {
mkdirp(path, function(err) {
if (err) throw err;
});
};

async function saveHtml(path, html) {
await fs.writeFile(path, html, (err) => {
if (err) throw err;
});
};


注意:我需要使用XPath :(

更新于6/25/18
现在,这给了我来自xpath选择器的所有链接。然后我进行迭代,然后仅使用page.goto转到正确的站点。

const linksXPath = '//table[2]//tr[td[a]]//td[1]/a';
const links = await page.evaluate((selector) => {
let results = [];
let query = document.evaluate(selector,
document,
null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (let i=0, length=query.snapshotLength; i<length; ++i) {
results.push(query.snapshotItem(i).href);
}
return results;
}, linksXPath);

最佳答案

我认为这是您的选择器。

我相信您的表格选择器应为:

"body > table > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child(1) > td > table.bodytext > tbody"


获取页面正确选择器的最简单方法是使用Chrome开发工具。

检查页面,然后转到“元素”选项卡。从那里,您应该看到所有HTML元素。右键单击您想要的那个(我去了 <tbody>,所以您可以遍历 <tr>元素。),然后选择copy>复制选择器。

关于xpath - 操纵,,遍历xpath选择的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50978091/

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