我正在学习JavaScript,node.js和Selenium Web Driver。 作为我教育过程的一部分,我正在为Instagram开发简单的机器人。 要模拟浏览器,我使用Chrome网络驱动程序。 在尝试获取关注者列表和帐户关注者数量时遇到问题:
此代码打开Instagram页面,输入凭据,转到某个帐户并打开此帐户的关注者。 用户名和密码等数据来自settings.json。
var webdriver = require('selenium-webdriver'),
by = webdriver.By,
Promise = require('promise'),
settings = require('./settings.json');
var browser = new webdriver
.Builder()
.withCapabilities(webdriver.Capabilities.chrome())
.build();
browser.manage().window().setSize(1024, 700);
browser.get('https://www.instagram.com/accounts/login/');
browser.sleep(settings.sleep_delay);
browser.findElement(by.name('username')).sendKeys(settings.instagram_account_username);
browser.findElement(by.name('password')).sendKeys(settings.instagram_account_password);
browser.findElement(by.xpath('//button')).click();
browser.sleep(settings.sleep_delay);
browser.get('https://www.instagram.com/SomeAccountHere/');
browser.sleep(settings.sleep_delay);
browser.findElement(by.partialLinkText('followers')).click();
此部分应该打开所有关注者,但不能正常工作:
var FollowersAll = browser.findElement(by.className('_4zhc5 notranslate _j7lfh'));
也尝试过xpath:
var FollowersAll = browser.findElement(by.xpath('/html/body/div[2]/div/div[2]/div/div[2]/ul/li[3]/div/div[1]/div/div[1]/a'));
当我在浏览器的控制台中运行时:
var i = document.getElementsByClassName('_4zhc5 notranslate _j7lfh');
工作正常。
我在调试模式下运行代码(使用WebStorm),它在每种情况下都显示变量" FollowersAll"是未定义的。 当我尝试检查帐户的关注者数量时也会发生同样的情况。
提前致谢。
答案 0 :(得分:0)
在DOM中,类名可以多次使用。在这种情况下,className的findElement不起作用。
Xpath应该是相对的,不应该是绝对的。
尝试使用唯一HTML属性的Xpath。例如:
1. // div [@ id / text()=' value']
在Chrome浏览器中,打开“开发人员工具”(按F12)。如果您构建了一个Xpath,只需按Ctrl + F并粘贴该Xpath即可。如果它指出1的1,那么你肯定可以使用那个Xpath。
如果它说明了其中的一个,那么你需要深入挖掘以获取精确的Xpath。