写在前面
本来这篇文章该几个月前写的, 后来忙着忙着就给忘记了.
ps: 事多有时候反倒会耽误事.
几个月前, 记得群里一朋友说想用 selenium 去爬数据, 关于爬数据, 一般是模拟访问某些固定网站, 将自己关注的信息进行爬取, 然后再将爬出的数据进行处理.
他的需求是将文章直接导入到富文本编辑器去发布, 其实这也是爬虫中的一种.
其实这也并不难, 就是 UI 自动化的过程, 下面让我们开始吧.
准备工具 / 原料
1,java 语言
2,IDEA 开发工具
- ,jdk1.8
- ,selenium-server-standalone(3.0 以上版本)
步骤
1, 分解需求:
需求重点主要是要保证原文格式样式都保留:
将要爬取文章, 全选并复制
将复制后的文本, 粘贴到富文本编辑器中即可
2, 代码实现思路:
键盘事件模拟 CTRL+A 全选
键盘事件模拟 CTRL+C 复制
键盘事件模拟 CTRL+V 粘贴
3, 实例代码
- import org.junit.AfterClass;
- import org.junit.BeforeClass;
- import org.junit.Test;
- import org.openqa.selenium.By;
- import org.openqa.selenium.webDriver;
- import org.openqa.selenium.Chrome.ChromeDriver;
- import java.awt.*;
- import java.awt.event.KeyEvent;
- import java.util.concurrent.TimeUnit;
- /**
- * @author rongrong
- * Selenium 模拟访问网站爬虫操作代码示例
- */
- public class Demo {
- private static WebDriver driver;
- static final int MAX_TIMEOUT_IN_SECONDS = 5;
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- driver = new ChromeDriver();
- String url = "https://temai.snssdk.com/article/feed/index?id=6675245569071383053&subscribe=5501679303&source_type=28&content_type=1&create_user_id=34013&adid=__AID__&tt_group_id=6675245569071383053";
- driver.manage().Windows().maximize();
- driver.manage().timeouts().implicitlyWait(MAX_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
- driver.get(url);
- }
- @AfterClass
- public static void tearDownAfterClass() throws Exception {
- if (driver != null) {
- System.out.println("运行结束!");
- driver.quit();
- }
- }
- @Test
- public void test() throws InterruptedException {
- Robot robot = null;
- try {
- robot = new Robot();
- } catch (AWTException e1) {
- e1.printStackTrace();
- }
- robot.keyPress(KeyEvent.VK_CONTROL);
- robot.keyPress(KeyEvent.VK_A);
- robot.keyRelease(KeyEvent.VK_A);
- Thread.sleep(2000);
- robot.keyPress(KeyEvent.VK_C);
- robot.keyRelease(KeyEvent.VK_C);
- robot.keyRelease(KeyEvent.VK_CONTROL);
- driver.get("https://ueditor.baidu.com/website/onlinedemo.html");
- Thread.sleep(2000);
- driver.switchTo().frame(0);
- driver.findElement(By.tagName("body")).click();
- robot.keyPress(KeyEvent.VK_CONTROL);
- robot.keyPress(KeyEvent.VK_V);
- robot.keyRelease(KeyEvent.VK_V);
- robot.keyRelease(KeyEvent.VK_CONTROL);
- Thread.sleep(2000);
- }
- }
写在后面
笔者并不是特别建议使用 selenium 做爬虫, 原因如下:
速度慢:
每次运行爬虫都要打开一个浏览器, 初始化还需要加载图片, JS 渲染等等一大堆东西;
占用资源太多:
有人说, 把换成无头浏览器, 原理都是一样的, 都是打开浏览器, 而且很多网站会验证参数, 如果对方看到你恶意请求访问, 会办了你的请求, 然后你又要考虑更换请求头的事情, 事情复杂程度不知道多了多少, 还得去改代码, 麻烦死了.
对网络的要求会更高:
加载了很多可能对您没有价值的补充文件 (如 CSS,JS 和图像文件). 与真正需要的资源(使用单独的 HTTP 请求) 相比, 这可能会产生更多的流量.
来源: https://www.cnblogs.com/longronglang/p/10990593.html