脚本超时。
$x()
不是通过XPath选择元素的标准JavaScript方法。$X()
它只是chrome DevTools中的一个助手。他们在文件中声称:
注意:此API仅可从控制台本身获得。不能从页面上的脚本访问命令行API。
而page.evaluate()
在这里被视为“页面上的脚本”。
下面是在page.evaluate()
中选择元素(特色文章)的示例:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://en.wikipedia.org', { waitUntil: 'networkidle2' });
const text = await page.evaluate(() => {
// $x() is not a JS standard -
// this is only sugar syntax in chrome devtools
// use document.evaluate()
const featureArticle = document
.evaluate(
'//*[@id="mp-tfa"]',
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
)
.singleNodeValue;
return featureArticle.textContent;
});
console.log(text);
await browser.close();
})();
此示例实现了与1中相同的结果。示例:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://en.wikipedia.org', { waitUntil: 'networkidle2' });
// await page.$x() returns array of ElementHandle
// we are only interested in the first element
const featureArticle = (await page.$x('//*[@id="mp-tfa"]'))[0];
// the same as:
// const featureArticle = await page.$('#mp-tfa');
const text = await page.evaluate(el => {
// do what you want with featureArticle in page.evaluate
return el.textContent;
}, featureArticle);
console.log(text);
await browser.close();
})();
下面是一个相关的问题,如何将$x()
帮助器函数注入到脚本中。
问题内容: 我有这个HTML代码: 而且我必须选择带有text 的标签所标识的WebElement 。我尝试一些解决方案,例如: 但是每个人都给我: 正确的语法是什么?有人能帮我吗? 问题答案: 您没有正确的XPath语法。您需要在要匹配的文本属性值周围加上引号。尝试:
问题内容: 假设我有一个名为“ xml”的表,该表将XML文件存储在单列“数据”中。如何编写运行XPath并仅返回与该XPath匹配的行的MySQL查询? 问题答案: 但是,您应该注意,MySQL对XPath的支持存在局限性。 仅返回CDATA。 并非所有XPath构造都受支持。abatishchev的答案中提到的文档页面上“ XPath限制”标题下的详细信息。
我想选择所有@number has category=“a”我尝试使用//@number[@category/text()='a'],但它似乎不起作用,所以我如何获得它
问题内容: 我想使用Android Studio使用Gradle构建工具开发应用程序。我无法在上插入存储库和库。我的文件如下: 如何在项目中添加OpenCV? 问题答案: 您可以在Android Studio中轻松完成此操作。 请按照以下步骤将Open CV作为库添加到您的项目中。 libraries在项目主目录下创建一个文件夹。例如,如果您的项目是OpenCVExamples,则将创建一个Ope
我想使用Android Studio开发一个应用程序使用Gradle构建工具。我无法在上插入OpenCV repo和库。我的文件如下所示: 我如何在我的项目中添加OpenCV?
我跟踪了元素的XPath,并希望使用selenium中的verifyText()命令提取文本。 完整XPATH:html/body/table[2]/tbody/tr/td[3]/table/tbody/tr[4]/td/table/tbody/tr[2]/td/table/tbody/tr[2]/td html的一部分如下所示,如何获取文本,即“当您在selenium中使用verifyText(
问题内容: 我想对英语句子加标签,并进行一些处理。我想使用openNLP。我已经安装了 当我执行命令时 它提供输出POSTagging Text.txt中的输入 我希望它安装正确吗? 现在如何从Java应用程序内部进行此POStagging?我已将openNLPtools,jwnl,maxent jar添加到项目中,但是如何调用POStagging? 问题答案: 这是我放在一起的一些(旧)示例代码
问题内容: 我必须在GWT入口点使用java.util.Calendar,但是在运行应用程序时出现错误,这是因为GWT无法找到源代码,无论如何我都可以解决此问题。 提前致谢!!! 问题答案: java.util.Calendar不是模拟的类。您可以在此处找到仿真类的列表: http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.ht