Java爬虫(二)找到被模拟点击按钮的一些技巧

Java爬虫在获取最新页面信息时,难免会用到模拟点击某些按钮来刷新页面,然后获取到页面信息,简单的情况就不说了,说说笔者最近做的一些爬虫时遇到的问题和解决方案吧,估计这些你们都用得到。

一、建设银行爬虫-爬取收款信息

问题:

当IE驱动拉起建设银行登录页面我们登录后需要跳转到交易明细,这时问题来了。模拟点击明细时,建设银行官网弹出了个新的窗口,那么怎么获取新窗口上面的html页面呢?

解决方案:

窗口切换,直接上代码

     //TODO 窗口切换
        if(ifonce) {
        	//打印并获取当前窗口网址(刚登陆上的页面不是我们需要的)
            System.out.println("URL1:" + driver.getCurrentUrl());
            String url1=driver.getCurrentUrl();
            //获取当前所以窗口的网址
            Set winHandels = driver.getWindowHandles();
            List it = new ArrayList(winHandels);
            //跳转list第一个网址
            driver.switchTo().window((String) it.get(0));
            Thread.sleep(1000);
            //判断这个网址是不是刚登陆上的官网地址
            if(driver.getCurrentUrl().equals(url1)){
            	//跳转到另一个网址(如果第一个网址不是,那么第二个肯定是了对吧)
                driver.switchTo().window((String) it.get(1));
            }
            System.out.println("URL2:" + driver.getCurrentUrl());
            //切换窗口后我们之后就在这个窗口刷新获取数据就行了,所以把这个标签设为false
            ifonce=false;
        }

二、拼多多爬虫 -爬取商家订单信息

问题:

如图:首先我们需要更新网址(因为一次性选择条件好只点击刷新,最新数据刷新不出来)然后订单状态选择全部,接着拼单成功时间选择24小时内,最后点刷新。难点,我们需要先点一下边框,弹出下拉列表才能选择条件,而且这几个的class都一样没有唯一标识。
在这里插入图片描述

解决方案:

先找到第几个class,然后找到唯一标识。直接上代码

 while (notInterrupted) {
            System.out.println("***************************正在抓取数据:第"+(count++)+"次*******************************");

//待发货订单
            driver.navigate().refresh();

//全部订单
			//默认第一个class
            WebElement e = driver.findElement(By.className("pdd-dui-select-text"));
            e.click();

            Thread.sleep(2800);
            //默认第一个class
            WebElement element = driver.findElement(By.className("pdd-dui-options-wrap"));
            element.findElement(By.partialLinkText("全部")).click();
            Thread.sleep(1000);
//帅选售后
//			  driver.findElements(By.className("pdd-dui-select-text")).get(1).click();
//            Thread.sleep(2800);
//            WebElement we=driver.findElements(By.className("pdd-dui-options-wrap")).get(1);
//            we.findElement(By.partialLinkText("全部")).click();
//            Thread.sleep(1000);

//查找时间
			//我们获取从上到下第5个class点击弹出下拉表单然后然后在选择点击最近24小时还是其他时间
            driver.findElements(By.className("pdd-dui-select-text")).get(4).click();
            Thread.sleep(2800);
            WebElement webE=driver.findElements(By.className("pdd-dui-options-wrap")).get(4);
            //webE.findElement(By.partialLinkText("最近24小时内")).click();
            webE.findElement(By.partialLinkText("最近7天内")).click();

//点击查询
            Thread.sleep(2000);
            //这里有唯一的class当然最好
            WebElement ele = driver.findElement(By.className("ez-75"));
            ele.findElement(By.partialLinkText("查询")).click();


//   补单
//            Thread.sleep(1000);
//            WebElement webElement=driver.findElement(By.className("pdd-pagination"));
//            webElement.findElement(By.partialLinkText(String.valueOf(budan))).click();
//            if(budan<=5){
//                budan++;
//            }else {
//                budan=1;
//            }

            Thread.sleep(500);
            String data = driver.getPageSource();
            //System.out.println(data);
            task.initial(data);
            threadPool.submit(task);
            //除去上面已睡眠的3s
            Thread.sleep(DataProcessor.getTimeInterval() * 1000 - 3000);
        }

三、数据解析
数据解析需要大家用好正则表达式,推荐地址:
https://blog.csdn.net/Z_Vivian/article/details/89295118

问题:

selenium click点击无反应问题解析

解决方案:

使用js脚本点击元素

 		WebElement el = driver.findElement(By.className("index-mod__checkbox___3mesI"));
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("arguments[0].click();",el);
发布了55 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Z_Vivian/article/details/90373929
今日推荐