【问题标题】:What is the JavaScript equivalent of python's .text?python的.text的JavaScript等价物是什么?
【发布时间】:2018-12-08 22:22:06
【问题描述】:

Element.text 返回元素的文本内容。

在 SO 上的另一个 thread 中,python 脚本从 Instagram 帐户上的关注者模式中抓取数据。以下部分返回列表中的文本并将它们存储在数组中。

 xpath = "//div[@style='position: relative; z-index: 1;']//ul/li/div/div/div/div/a"
 followers_elems = driver.find_elements_by_xpath(xpath)
 return [e.text for e in followers_elems]

我正在尝试在 JavaScript 中实现类似的结果(我正在使用 WebDriverJS):

 const XPATH = "/html/body/div[3]/div/div[2]/div/div[2]/ul/div/li";
 var followers_elems = await driver.findElements(By.xpath(XPATH));
 var followers_temp = [];
 for (var e in followers_elems) {
  followers_temp.push(e.textContent); }
 console.log(followers_temp);

我不确定 textContent 是否是 .text 的正确属性。

我已经尝试了一百万种不同的选择,但我得到的只是数组中未定义的值:

我对 JS 还不是很精通,但我确信 e 是从 followers_elems 读取的,如果我只在数组中推送 e,它可以很好地记录总关注者数量。它正在从我不理解的 xpath 获取文本值。 Python 如此优雅地做到了这一点,但尽管冗长的 JavaScript 让我失望了。

谢谢。

【问题讨论】:

  • 尝试记录 e 并查看哪个属性名称包含您想要的文本。在 JS 中,你可以这样做:console.log(e);
  • 谢谢阿布舍克。我想要的文本是来自 xpath 的 textContent。关注我的人的用户名。事实上,我上面的代码打算从关注者模式中的每个
  • 中获取所有可读文本。记录e 会给我关注人数。但我需要 followers_temp 数组中带有用户名的文本。
  • 你在异步函数中运行 await 吗?
  • 是的。我已经让其余部分在 JS 中运行顺利。将整个脚本发布到某个地方会更有帮助吗?
  • 我在下面发布了一个函数,如果你抓住它的for循环部分它会起作用。
  • 标签: javascript node.js selenium-webdriver npm


    【解决方案1】:

    WebElement.getText() 相当于 javascript 在使用 WebdriverJS 时在 python 中获取文本元素。

    这应该适合你。我创建了一个异步函数并且易于理解的 for 循环。另外,由于 getText() 返回一个承诺,所以我使用 async - await 来获取文本并将其推送到 follower_temp 数组。

    async function pushTextIn() {
      for (let i = 0; i < followers_elems.length; i++) {
        let text = await followers_elems[i].getText();
        console.log('pushing text: ', text);
        followers_temp.push(text);
      }
      return followers_temp;
    }
    

    【讨论】:

    • 没问题!我之前尝试过 getText() 方法并用 .then() 解决了这个承诺。但我收到 getText 不是函数的类型错误。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签