我正试图使我的访问自动化,并在一个法国网站上做一些废弃。(http://espaceclientcanal.canal-plus.com/aide/pid792-s-inscrire-sur-l-espace-client.html)。
我有一个有效的帐户,但是我不能用selenium登录。我已经设法用xpath表达式或这样的代码获取元素:
browser.findElement(webdriver.By.id('sso-email')).sendKeys('mymail@org.com');
//var emailField = browser.findElement(webdriver.By.xpath("//input[@id='sso-email']")) ;我还使用了以下函数来确保元素的存在:
function isElementPresent(driver, by){
try{
driver.findElement(by);
return true;
}catch(NoSuchElementException){
return false;
}
}我的网络驱动程序就是这样:
var fs = require('fs');
var chromedriver = require('chromedriver');
var webdriver = require('selenium-webdriver');
var browser = new webdriver.Builder().usingServer().withCapabilities({ 'browserName': 'chrome' }).build();每次我得到以下错误:
NoSuchElementError:没有这样的元素:无法找到元素:{“方法”:“css选择器”,“选择器”:“*id=”sso-email“}”(会话信息: chrome=56.0.2924.87) (驱动程序信息: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 10.0.14393 x86_64)
我对xpath表达式很有信心(也许我错了).
我不明白这是什么错误。
登录表单似乎是作为组件生成的(首先显示一个进度轮);这是否可能是专门为防止自动脚本而设计的呢?
发布于 2017-03-19 20:59:34
您的Selenium代码看起来不错,但不完整。
登录表单被放置在带有iframe的name="pass_iframe"中。
因此,在找到电子邮件和密码字段之前,您需要从页面获取iframe,切换到它,识别登录元素并执行登录,然后切换回主页。
var iframe = driver.findElements(webdriver.By.xpath('iframe[name='pass_iframe']'));
driver.switchTo().frame(iframe);
//find the login elements
//do the login
driver.switchTo().defaultContent();https://stackoverflow.com/questions/42890900
复制相似问题