我正在尝试从agoda.com抓取数据。我想按语言,英语过滤所有评论。当我根据选择器进行计数时,我得到1,但是,当我尝试单击或等待元素可见时,程序会在超时后抛出元素不可见的异常。
这是我到目前为止尝试的代码
String url = "https://www.agoda.com/en-sg/resorts-world-sentosa-hard-rock-hotel/hotel/singapore-sg.html";
driver.get(url);
try {
for (WebElement element: driver.findElements(By.xpath("//*[starts-with(@id, 'language-')]"))) {
if (element.getTagName().equalsIgnoreCase("input")) {
if (element.findElement(By.xpath("..")).getText().equalsIgnoreCase("english")) {
wait.until(ExpectedConditions.visibilityOf(element));
element.click();
break;
}
}
}
}catch(Exception e){
System.out.println(e.getMessage());
}
我哪里错了?
答案 0 :(得分:1)
请尝试使用以下代码:
// To find and click on required check-box
WebElement element = driver.findElement(By.xpath("//div[input[starts-with(@id, 'language-')]/span[text()='English']]"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.click();
actions.perform();
答案 1 :(得分:0)
不可能从这里确定什么是错的,特别是没有来自异常的实际复制粘贴,但是其中一个原因是存在但当前不可见的元素。它可能会被抑制或退出视口。如果您在支持“开发人员”模式的浏览器(例如Chrome)中打开该页面,则可以查看元素属性以确认或反驳该页面。
附注:
•发布有关您的问题的完整信息。什么是确切的异常,它的消息,以及堆栈跟踪的几行?
•如果可能,请从“开发人员”视图中发布Web元素的详细信息。
•不要抓住Exception
,抓住特定的例外情况。
•复制并粘贴代码片段,而不是重新输入。如果您的实际代码名为printlkn
,那么您会遇到更深层次的问题。