我正在尝试自动化访问权限并在法国网站上进行一些报废。 (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;
}
}
像我这样初始化我的webdriver:
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"]&# 34;}(会话 info:chrome = 56.0.2924.87)(驱动信息:chromedriver = 2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform = Windows NT 10.0.14393 x86_64)
我对我的xpath表达有信心(也许我错了)...
我不明白错误是什么。
登录表单似乎是作为组件生成的(首先显示进度轮);它是否有可能专门用于防止脚本自动化?
答案 0 :(得分:0)
您的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();