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单击“下一步”按钮
python下用selenium的webdriver包如何在执行完点击下一页后没有获得下一页新打开页面的html源代码
python下用selenium的webdriver包如何在执行完点击下一页后获得下一页新打开页面的html源代码呢?
使用selenium webdriver+beautifulsoup+跳转frame,实现模拟点击网页下一页按钮,抓取网页数据