元素不可见硒

时间:2017-01-17 07:48:58

标签: java selenium click web-crawler

我正在尝试从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());
}

我哪里错了?

2 个答案:

答案 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,那么您会遇到更深层次的问题。