数据提取-Selenium专治各种顽固性客户端

2023-10-31

         说起Selenium,很多人想到的是Selenium用在自动化web测试上,的确,Selenium是一个很好的自动化测试工具,能够实现很多便利的测试功能。其实Selenium也是一款数据抽取的神器。我们知道现在很多网站使用了很多javascript,ajax,cookie,session等等,或者人为设置了很多规则来防止/限制爬虫,有过提取数据的都知道在提取数据的过程中,会遇到各种顽固性问题,像上篇介绍的httpclient之类,虽然做了一些东西,但还是存在很多不足,尤其是JS解析,支持很有限。这个时候就可以试试Selenium这款神器了。

        Selenium IDE

        先来说说Selenium IDE,这个是Selenium通过图形界面的方式,很方便支持web页面操作,而且可以记录操作的过程,形成脚本,不过目前只有FireFox插件,其他的浏览器不支持。 所以我们说的Selenium IDE其实就是一个FireFox插件。下载/安装好插件之后,FireFox浏览器右上角就多了一个Se的图标,就是Selenium IDE了,就可以使用。


一如你般聪明,很容易就知道怎么开始了。想要导出各种脚本,也是很容易的


         多种语言可以选择,你值得拥有。

         不过话说这种方式还是有不少坑的,

          首先下载插件都不容易,Selenium官网好像被强了,基本下载不了;

          FireFox版本和Selenium IDE版本要对应,不然就经常出现很多错误;

          录制的脚本经常回放不了,这个比较悲催了。

          Selenium RC

          Selenium server端,也就是Selenium Remote Control简称RC,RC主要包括三个部分,launcher,http proxy,selenium core, 其中selenium core是由一堆javascript函数构成,通过调用这些函数,来实现对浏览器的各种操作。Selenium2主要解决了几点1.没有原生的鼠标和键盘事件;2.XSS/HTTP同源数据问题;3.popup dialog问题。Webdriver对不同浏览器的处理和Selenium1.0有着明显的不同,Selenium1.0不管是什么浏览器,都是由javascript来处理,而webdriver是选择浏览器最容易识别的语言来处理,比如在Firefox中javascript最容易,在IE中C++最容易识别,通过灵活选择最容易识别的语言来处理多浏览器,我们就可以很好的回避某些浏览器对javascript的安全限制,Webdriver不仅可以处理这方面的问题,而且可以调用操作系统API,尤其是当用户需要模拟鼠标或键盘操作时,这项能力的作用表现的尤其明显。目前支持主流的浏览器,包括chrome,firefox,IE等,使用的时候要下载对应的driver.

        有了server端,我们就可以通过代码来控制各种操作,发送命令给服务端,接受到返回的结果,解析返回的结果。

        下面通过简短的代码片段来说明下:

               // System.setProperty("webdriver.firefox.bin",
          // "D:/Program Files/Mozilla firefox33/firefox.exe");
         System.setProperty("webdriver.chrome.bin",
        "C:/Program Files/Google/Chrome/Application/chrome.exe");

                WebDriver driver = new ChromeDriver();

                driver.get(baseUrl + "/");  //访问一个页面
              driver.manage().window().maximize();//浏览器最大化
             // Thread.sleep(2000);
             Actions a = new Actions(driver);
             a.click(driver.findElement(By.linkText("供应商")));// not work???
             // driver.findElement(By.linkText("供应商")).click();


            // Thread.sleep(2000);
           driver.findElement(By.id("alisearch-keywords")).clear();
           driver.findElement(By.id("alisearch-keywords")).sendKeys(key);
           driver.findElement(By.id("alisearch-submit")).submit();
           Actions action = new Actions(driver);
          action.sendKeys(Keys.ENTER);// 模拟按下并释放 TAB键

                经常遇到鼠标点击数据不工作,没有效果,可以试试这个:

                WebElement we = driver.findElement(By.linkText("" + i));
               act.moveToElement(we).perform();   //先移动到某个元素,然后执行

              需要说明的是,代码中有很多sleep的时候,因为由于网络等各方面的原因,经常需要等待,不然会现在元素不存在的异常。

              每次跳转到新的页面,我们可以遍历元素或者driver.getPageSource()得到所有的响应,来解析响应提取的部分,这样也是很方便的。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据提取-Selenium专治各种顽固性客户端 的相关文章

随机推荐

  • Minor GC 过程

    如果Eden空间占满了 会触发 minor GC Minor GC后仍然存活的对象会被复制到S0中去 这样Eden就被清空可以分配给新的对象 又触发了一次 Minor GC S0和Eden中存活的对象被复制到S1中 并且S0和Eden被清空
  • TypeScript 最快速的入门教程

    TypeScript 最快速的入门教程 在线阅读 https niexia github io typescript tutorial 英文原版 https www typescripttutorial net 如果对你有帮助 欢迎在 gi
  • HarmonyOS开发详解(二)——鸿蒙开发体系详解及入门实例演示运行

    本篇文章的计划 先体系的介绍一下鸿蒙开发相关的体系内容 希望通过本篇内容构建对鸿蒙开发体系的了解 最后再来一个最简单入门例子 既是自我的学习 也希望对你了解鸿蒙开发的全貌有帮助 这样安排而没有直接写一个Helloworld例子的原因 很多朋
  • Leetcode 剑指Offer

    求 1 2 n 要求不能使用乘除法 for while if else switch case等关键字及条件判断语句 A B C 示例 1 输入 n 3 输出 6 示例 2 输入 n 9 输出 45 一 信息 1 求一个等差数列的求和 2
  • React教程(一)React基础

    1 React基础 目标 能够说出React是什么 能够说出React特点 能够掌握React的基本使用 能够使用React脚手架 1 1 React概述 官方网址 https zh hans reactjs org 1 1 1 什么是Re
  • jacob 导出word文档打开显示为web视图问题

    问题产生 由于是使用html 另存为word导致打开生成的word文档为web视图 Dispatch call this document SaveAs outputPath 问题解决 1 创建空的word 文档 this document
  • (大全)预后Cox 列线图Nomogram 校正曲线calibration curve 时间依赖ROC survivalROC C指数C-index 两ROC比较

    Cox模型 等比例风险检验 Nomogram C index 校准曲线 时间 ROC曲线 内置包数据运行 预期结果看图 部分代码加上自己的理解 可以直接复制到R运行 加载包 我用 R 3 6版本的 library cmprsk 已经包含在这
  • Java 垃圾回收机制原理

    一 垃圾回收机制的意义 java 语言中一个显著的特点就是引入了java回收机制 是c 程序员最头疼的内存管理的问题迎刃而解 它使得java程序员在编写程序的时候不在考虑内存管理 由于有个垃圾回收机制 java中的额对象不在有 作用域 的概
  • PowerShell学习基础篇(使用帮助)

    一 背景介绍 PowerShell不仅仅是一门脚本语言 其实是一种运行命令行工具的命令行Shell 虽然PowerShell可以通过脚本实现很复杂的功能 但脚本仅是使用PowerShell的一种方式 PowerShell为Windows管理
  • es封装cookie工具类

    CookieUtil js const CookieUtil get name let cookieName encodeURIComponent name cookieStart document cookie indexOf cooki
  • SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置

    序 关于标题 说是教学 实在愧不敢当 但苦与本人文笔有限 实在找不到更合理 谦逊的词语表达 只能先这样定义了 其实最真实的想法 只是希望这个关键词能让更多的人浏览到这篇文章 也算是对于自己写文章的一个肯定吧 关于内容 再写这系列文章之前 本
  • 【数据结构与算法】5、循环链表、约瑟夫问题、静态链表

    循环链表目录 一 单向循环链表 1 add 2 remove 3 单向循环链表特点 二 双向循环链表 三 约瑟夫问题 Josephus Problem 四 静态链表 一 单向循环链表 单向循环链表在单链表的基础上 尾节点的 next 指向头
  • nrm 安装与使用

    nrm 安装与使用 nrm 是 npm 的镜像源管理工具 可以用来切换 npm 镜像源 安装 nrm 使用 npm 全局安装 npm i g nrm nrm 命令 查看镜像列表 带 号为当前镜像 nrm ls 查看当前所在镜像 nrm cu
  • 【STM32F4】二、I/O引脚的复用和映射

    目录 一 基本概念 1 什么是I O引脚 2 什么是I O引脚的复用 二 如何配置I O引脚复用 1 复用器 GPIOx AFRL GPIOx AFRH 和复用功能 AF 2 程序编写 2 1 打开I O时钟和复用功能对应外设时钟 2 2
  • win7安装ubuntu,如何设置win7为默认启动项

    第一种方法 运行sudo gedit etc default grub 输入密码 将GRUB DEFAULT 0改为GRUB DEFAULT 4 如果没做过其他设置 即启动时win7为第5项 可根据自己情况更改 然后运行sudo updat
  • Android 快速开发框架:推荐10个框架

    一 Afinal 官方介绍 Afinal是一个android的ioc orm框架 内置了四大模块功能 FinalAcitivity FinalBitmap FinalDb FinalHttp 通过finalActivity 我们可以通过注解
  • 免费的HTML5连载来了《HTML5网页开发实例详解》连载(五)图解通过Fiddler加速开发...

    Fiddler是Windows底下最强大的请求代理调试工具 监控任何浏览器的HTTP HTTPS流量 窜改客户端请求和服务器响应 解密HTTPS Web会话 图4 44为Fiddler原理示意图 图4 44 Fiddler原理示意图 Fid
  • 20个基于SpringBoot搭建的开源项目,总有一个你会感兴趣

    前言 SpringBoot一直是开发者比较青睐的一款轻量级框架 他不仅继承了Spring框架原有的优秀特性 而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程 现在很多Java系的软件开发都是基于SpringBoot的 这
  • 安秒平衡在单相整流器纹波分析中的应用

    1 占空比表达式 单相PWM整流器的拓扑如图所示 四个开关管S1 S4 采用双极性调制 S1与S4开关信号一样 S2和S3开关信号相同 两者互补 假设调制度表达式 m Vgm Vo S1占空比表达式为D S1 0 5m sinwt 0 5
  • 数据提取-Selenium专治各种顽固性客户端

    说起Selenium 很多人想到的是Selenium用在自动化web测试上 的确 Selenium是一个很好的自动化测试工具 能够实现很多便利的测试功能 其实Selenium也是一款数据抽取的神器 我们知道现在很多网站使用了很多javasc