0


Java学习笔记:爬虫-操作动态网页的Selenium

Why Selenium?

有些网页内容是在浏览器端动态生成的,直接Http获取网页源码是得不到那些元素的。

Selenium可以自动启动一个浏览器、打开网页,可以用程序操作页面元素,也可以获得浏览器当前页面动态加载的页面元素。

比如:百度图片的图片是动态加载的。

用法:

1、下载安装Chrome浏览器。

2、下载Chrome对应版本的Selenium chromeDriver

镜像文件

Index of chromedriver-local

查找版本相似的下载

我是Windows系统,就下Windows版本

下载好,把文件放在你Chrome浏览器的同一级文件夹下

3、将chromeDriver 放在chrome浏览器根目录下,它负责对Chrome浏览器执行自动化操作

4、程序通过Maven安装包:selenium-java,它和chromeDriver通讯。

下载百度图片的图片

自动的将网页打开

百度图片的图片是动态加载的。

System.setProperty("webdriver.chrome.driver", chromedriver的路径);

ChromeDriver driver = new ChromeDriver();

String url=百度图片网址;

driver.get(url);

List<WebElement> imgs = driver.findElement(By.className("imglist")).findElements(By.tagName("img"));

for(int i=0;i<imgs.size();i++)

{

WebElement img = imgs.get(i);

String imgSrc = img.getAttribute("data-imgurl");

byte[] bytes = new HttpSender().sendGetBytes(imgSrc);//yzk18-net

ImageType imgType = ImageHelpers.detectImageType(bytes);//yzk18-commons

IOHelpers.writeAllBytes("e:/temp/"+i+"."+imgType,bytes);

}

driver.close();

driver.quit();

More

package Part6;

import com.yzk18.commons.IOHelpers;
import com.yzk18.net.HttpSender;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.List;

public class SeleniumTest1 {
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver","C:\\Users\\PC\\Desktop\\Google\\Chrome\\Application/chromedriver.exe");
        ChromeDriver driver=new ChromeDriver();
        /*
        driver.get("https://image.baidu.com/");
        WebElement kw =driver.findElement(By.id("kw"));//findElement如果有多个,就返回第一个,如果都没有就抛异常
        kw.sendKeys("白姨");
        WebElement s_newBtn=driver.findElement(By.className("s_newBtn"));
        s_newBtn.click();
        */
        driver.get("https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1658837529512_R&pv=&ic=0&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&dyTabStr=&ie=utf-8&sid=&word=%E5%8E%9F%E7%A5%9E%E7%99%BD%E5%A7%A8");
        List<WebElement> imgs =driver.findElements(By.className("imgitem"));
        int i=1;//文件名计数
        for (WebElement img:imgs){
            String imgUrl=img.getAttribute("data-thumburl");
            System.out.println(imgUrl);
            String imgText=img.findElement(By.className("imgitem-title")).getText();
            imgText=imgText.replace("*","").replace("?","").replace("|","").replace("/","").replace("\\","");
//            保存图片
            byte[] bytes=new HttpSender().sendGetBytes(imgUrl);
            IOHelpers.writeAllBytes("D:\\temp\\爬虫\\图片/1/"+imgText+i+".jpeg",bytes);
            i++;
        }
        Thread.sleep(5000);
        driver.close();
        driver.quit();
    }
}

为什么只爬了几张,这个涉及到了计算机的虚拟模式概念。

获取更多图片?

页面滚动,但是有虚模式的问题需要处理。还有反反爬、代理、验证码…………。爬虫入门容易,如果精通则需要是优秀的网站开发者(前端+后端)。

标签: 学习 爬虫 selenium

本文转载自: https://blog.csdn.net/weixin_64612659/article/details/126001513
版权归原作者 愿君记取此一枝 所有, 如有侵权,请联系我们删除。

“Java学习笔记:爬虫-操作动态网页的Selenium”的评论:

还没有评论