selenium如何继续填充下一页的数据?

Posted

技术标签:

【中文标题】selenium如何继续填充下一页的数据?【英文标题】:How to continue to fill the data in next page by selenium? 【发布时间】:2017-01-30 07:21:19 【问题描述】:

我想通过Selenium 登录。它将过程分为 2 页。

电子邮件 密码

现在我可以在第一页输入密钥。然后我应该进入下一页(输入密码并单击提交密钥)。

但是,如果我只在一个类中添加4个键码,它无法完成第二页键输入(密码和提交)

我猜第一页键输入和第二页键输入之间缺少一些代码。

public class Selenium 

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 



WebDriver driver;
System.setProperty("webdriver.gecko.driver", "C:\\Users\\Downloads\\geckodriver-v0.10.0-win64\\wires.exe");
driver =new FirefoxDriver();


driver.get("https://mail.google.com");
driver.findElement(By.id("Email")).sendKeys("yourEmailId");//first page
driver.findElement(By.id("next")).click();//first page

driver.findElement(By.id("Passwd")).sendKeys("yourPassword");//next page
driver.findElement(By.id("signIn")).click();//next page


driver.get("https://mail.google.com");
driver.findElement(By.id("Email")).sendKeys("yourEmailId");//first page
driver.findElement(By.id("next")).click();//first page


/* What code should I add here?  */


driver.findElement(By.id("Passwd")).sendKeys("yourPassword");//next page
driver.findElement(By.id("signIn")).click();//next page

【问题讨论】:

使用webdriverwait和expectedconditions类的可见性条件等待密码字段变得可见... 你的意思是.webdriverwait .visibility ? 【参考方案1】:

在找到这个元素之前尝试设置一个大概 10 秒的隐式等待:-

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.id("Passwd")).sendKeys("yourPassword");
driver.findElement(By.id("signIn")).click();

或设置显式等待。显式等待是您定义的代码,用于等待特定条件发生,然后再继续执行代码。在您的情况下,它是密码输入字段的可见性。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Passwd")));
element.sendKeys("yourPassword");

//Now click on sign in button 
driver.findElement(By.id("signIn")).click();//next page

解释: selenium 找不到元素的原因是密码输入字段的id 最初是Passwd-hidden。单击“下一步”按钮后,Google 首先验证输入的电子邮件地址,然后显示密码输入字段(通过将 id 从Passwd-hidden 更改为Passwd)。因此,当密码字段仍然隐藏时(即 Google 仍在验证电子邮件 ID),您的网络驱动程序开始搜索 ID 为 Passwd 的密码输入字段,该字段仍然隐藏。因此,您应该等到它变得可见。

【讨论】:

对于隐式等待,我加起来最多 30 秒。有时有效,有时无效。 对于显式等待,WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Passwd"))).sendKeys("yourPassword"); 不兼容类型:void 无法转换为 WebEelment @Vito 啊,抱歉,只是拼写错误,更新一下。现在试试,让我知道.. 显式等待很好。但是对于隐式等待,有时它有效,有时它不起作用。你能解释一下吗? 这可能是时间问题,我建议你总是尝试显式等待,因为它每 500 毫秒轮询一次定位元素,而隐式等待在给定时间内仅轮询两次,这可能是问题,使用显式等待并摆脱这个问题。谢谢..

以上是关于selenium如何继续填充下一页的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中使用selenium或scrapy单击“下一步”按钮

Selenium 点击下一页直到最后一页

python下用selenium的webdriver包如何在执行完点击下一页后没有获得下一页新打开页面的html源代码

python下用selenium的webdriver包如何在执行完点击下一页后获得下一页新打开页面的html源代码呢?

使用selenium webdriver+beautifulsoup+跳转frame,实现模拟点击网页下一页按钮,抓取网页数据

如何获取下一页的页面源