更新:我已经使用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的正确属性。
我已经尝试了一百万种不同的选择,但我得到的只是数组中未定义的值:
我还不太精通JS,但我确定e
正在从followers_elems
读取数据,如果我仅将e
推入数组,它可以记录总的关注者数字就好。它是从xpath获取我不了解的文本值。 Python做起来很优雅,但是尽管冗长的JavaScript令我失望。
谢谢。
答案 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;
}