我一直在尝试创建代码来自动登录我玩的一款名为《Life is Feudal》的游戏的网站来收集一些信息(一切都是合法的,我已经手动访问了我想要的信息,但这需要数年时间才能完成)收集一切)。
这是我的代码:
public static void main(String[] args) throws InterruptedException {
String Url = "https://lifeisfeudal.com/";
String email = "MYEMAIL";
String password = "MYPASSWORD";
WebDriver driver = setDriver();
// Open Life is feudal home page
driver.get(Url);
/*
* Logging into my account
*/
// Click on sign in button [WORK]
driver.findElement(By.linkText("Sign In")).click();
//Focus the Iframe
driver.switchTo().frame(driver.findElement(By.id("signin")));
/*
* Type in Email
*/
//Try #1 using name (DONT WORK)
driver.findElement(By.name("email")).sendKeys(email);
//Try #2 using xpath (DONT WORK)
driver.findElement(By.xpath("//*[@id=\"react-view\"]/div/div/div/div[2]/form/div[1]/div/input")).sendKeys(email);
/*
* Type in Password
*/
//Try #1 using name (DONT WORK)
driver.findElement(By.name("password")).sendKeys(password);
//Try #2 using xpath (DONT WORK)
driver.findElement(By.xpath("//*[@id=\"react-view\"]/div/div/div/div[2]/form/div[2]/div/input")).sendKeys(password);
/*
* Click the sign in button
*/
//Try (Havent tried it yet)
driver.findElement(By.linkText("Sign in")).click();
//Bring back to default
driver.switchTo().defaultContent();
//Rest of the code
}
这是 Iframe 内的 html 代码 HTML Iframe
编辑1:按照 Frank 的建议在切换框架后添加 thread.sleep(3000) 使其工作。
我认为它没有完全加载框架,并且正在尝试访问当时不存在的未完全加载的内容。
最佳答案
切换到 IFrame 后添加 Thread.Sleep(3000) 以确定是否是时间问题。如果是这样,请将 Thread.Sleep(3000) 替换为更强大的等待方式,例如显式等待。
关于java - Selenium 无法在 Iframe 中找到元素,即使它们可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49337708/