Selenium 框架做爬虫进行页面跳转时报 stale element not found - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tiRolin
V2EX    Java

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

  •  
  •   tiRolin 2023-07-27 16:11:28 +08:00 1447 次点击
    这是一个创建于 811 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想要爬取这个网址的日报周报月报信息: 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()是可以正确跳转的,但是在日报数据里的元素却不行

    我试了很多方法了,仍然没有进展,我真没办法了所以来问问个各位,麻烦懂得大佬能不吝赐教,小弟先谢过了

    7 条回复    2023-07-29 13:16:11 +08:00
    kanchi240
        1
    kanchi240  
       2023-07-27 16:42:57 +08:00
    // element.click(); 此处报 stale element not found 异常
    我这正常没报错,用的是 python
    deplivesb
        2
    deplivesb  
       2023-07-27 16:49:45 +08:00
    每日一遍:gov 的也敢
    pierswu
        3
    pierswu  
       2023-07-27 16:53:10 +08:00
    说明这个 a 标签是通过绑定事件实现的页面跳转,不是 href 属性
    godspeedyou
        4
    godspeedyou  
       2023-07-27 16:53:48 +08:00
    用 selenium IDE 模拟下,直接帮你生成代码
    kuan
        5
    kuan  
       2023-07-28 09:01:06 +08:00
    你通过"//*[@id=\"dataTable\"]/li[1]"获取的元素是 li 可以拿到下面的文字信息,但是跳转是点击下面的 a 标签,所以你"//*[@id=\"dataTable\"]/li[1]/a"这样就好了
    duan602728596
        6
    duan602728596  
       2023-07-28 10:53:54 +08:00
    讲道理,这个网站还没复杂到需要上 Selenium 的程度,上 Selenium 那是已经和反爬对抗的程度了。
    kachu673
        7
    kachu673  
       2023-07-29 13:16:11 +08:00
    gov 的新手还是别爬了,控制不好频率,容易进去。工作几年的老手都轻易不碰这种项目。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3362 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 04:41 PVG 12:41 LAX 21:41 JFK 00:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86