JavaScript与python .text的等效项是什么?

时间:2018-06-29 17:08:31

标签: javascript node.js selenium-webdriver npm

  

更新:我已经使用node.js完成并修改了此脚本,以使用户知道谁在Instagram上取消关注他/她。请在https://github.com/Barani1010/scrapeIG处找到它。感谢社区提供的这么多知识!

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的正确属性。

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

enter image description here

我还不太精通JS,但我确定e正在从followers_elems读取数据,如果我仅将e推入数组,它可以记录总的关注者数字就好。它是从xpath获取我不了解的文本值。 Python做起来很优雅,但是尽管冗长的JavaScript令我失望。

谢谢。

1 个答案:

答案 0 :(得分:1)

WebElement.getText()与使用WebdriverJS时在python中获取文本元素的javascript等效。

这应该为您工作。我创建了一个异步函数,对于循环很容易理解。另外,由于getText()返回一个promise,所以我正在使用async-等待获取文本并将其推送到followers_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;
}