Selenium 框架做爬虫进行页面跳转时报 stale element not found

查看 81|回复 4
作者:tiRolin   
我想要爬取这个网址的日报周报月报信息: http://zdscxx.moa.gov.cn:8080/nyb/pc/messageList.jsp?item=%E6%9C%80%E6%96%B0%E5%8F%91%E5%B8%83&isLatestMessage=true
我打算先爬取一个日报的内容来看看有什么问题,为此构建了下面的代码
public class Crawler {
    public static void main(String[] args) {
        System.getProperties().setProperty("webdriver.chrome.driver", "D:\\pachong\\new\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver chromeDriver = new ChromeDriver(options);
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        String originUrl = "http://zdscxx.moa.gov.cn:8080/nyb/pc/messageList.jsp?item=%E6%9C%80%E6%96%B0%E5%8F%91%E5%B8%83&isLatestMessage=true";
        chromeDriver.get(originUrl);
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        WebElement button = chromeDriver.findElement(By.xpath("/html/body/div[1]/div[2]/div[1]/div[2]/ul/li[3]"));
        button.click(); //此处可以正确跳转
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        WebElement element = chromeDriver.findElement(By.xpath("//*[@id=\"dataTable\"]/li[1]")); //用 xpath 获取第一条日报数据
        System.out.println(element.getText()); //有数据,说明正确获取到了元素
//        element.click(); 此处报 stale element not found 异常
        System.out.println();
        WebElement a = element.findElement(By.cssSelector("a")); //获取元素内部的元素
        System.out.println(a.getText()); //有数据,正确获取到了元素
        System.out.println();
        System.out.println(a.getAttribute("href"));
//        a.click(); 此处还是报 stale element not found 异常
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        chromeDriver.quit();
    }
}
我上面的代码的逻辑是先获取到分析报告日报的元素,然后执行点击操作,然后获取到第一条数据执行点击,但是在获取第一条数据点击那里就会一直报 stale element not found 的问题,我找不到网址没法通过网址直接跳转,因为这个网址的 href 属性里没有网址,而是 javascript:void(0);
分析报告日报这个元素里的 href 也是 javascript:void(0);,但是在这个元素里是调用 click()是可以正确跳转的,但是在日报数据里的元素却不行
我试了很多方法了,仍然没有进展,我真没办法了所以来问问个各位,麻烦懂得大佬能不吝赐教,小弟先谢过了

int, element, eep, stale

kanchi240   
// element.click(); 此处报 stale element not found 异常
我这正常没报错,用的是 python
deplivesb   
每日一遍:gov 的也敢
pierswu   
说明这个 a 标签是通过绑定事件实现的页面跳转,不是 href 属性
godspeedyou   
用 selenium IDE 模拟下,直接帮你生成代码
您需要登录后才可以回帖 登录 | 立即注册

返回顶部