大家好,又见面了,我是你们的朋友全栈君。
前言
目标网站:http://www.nhc.gov.cn 比我想象中要难爬的多,反爬机制是真的强。学习爬虫的朋友可以试试。这里介绍一种万能的方法,万金油selenium
Selenium Java API Docs 官方文档:https://www.selenium.dev/selenium/docs/api/java/
Selenium WebDriver | Selenium 中文文档:
https://wizardforcel.gitbooks.io/selenium-doc/content/official-site/selenium-web-driver.html
https://www.javadoc.io/doc/org.seleniumhq.selenium/selenium-api/2.50.1/org/openqa/selenium/WebDriver.html
一、Selenium 是什么?
Selenium 是一组软件工具集,每一个都有不同的方法来支持测试自动化。大多数使用 Selenium 的QA工程师只关注一两个最能满足他们的项目需求的工具上。然而,学习所有的工具你将有更多选择来解决不同类型的测试自动化问题。这一整套工具具备丰富的测试功能,很好的契合了测试各种类型的网站应用的需要。这些操作非常灵活,有多种选择来定位 UI 元素,同时将预期的测试结果和实际的行为进行比较。Selenium 一个最关键的特性是支持在多浏览器平台上进行测试。
二、Selenium 项目简史
Selenium 诞生于 2004 年,当在 ThoughtWorks 工作的 Jason Huggins 在测试一个内部应用时。作为一个聪明的家伙,他意识到相对于每次改动都需要手工进行测试,他的时间应该用得更有价值。他开发了一个可以驱动页面进行交互的 Javascript 库,能让多浏览器自动返回测试结果。那个库最终变成了 Selenium 的核心,它是 Selenium RC(远程控制)和 Selenium IDE 所有功能的基础。Selenium RC 是开拓性的,因为没有其他产品能让你使用自己喜欢的语言来控制浏览器。
Selenium 是一个庞大的工具,所以它也有自己的缺点。由于它使用了基于 Javascript 的自动化引擎,而浏览器对 Javascript 又有很多安全限制,有些事情就难以实现。更糟糕的是,网站应用正变得越来越强大,它们使用了新浏览器提供的各种特性,都使得这些限制让人痛苦不堪。
在 2006 年,一名 Google 的工程师, Simon Stewart 开始基于这个项目进行开发,这个项目被命名为 WebDriver。此时,Google 早已是 Selenium 的重度用户,但是测试工程师们不得不绕过它的限制进行工具。Simon 需要一款能通过浏览器和操作系统的本地方法直接和浏览器进行通话的测试工具,来解决Javascript 环境沙箱的问题。WebDriver 项目的目标就是要解决 Selenium 的痛点。
跳到 2008 年。北京奥运会的召开显示了中国在全球的实力,大规模的次贷危机引发了“大萧条”以来美国最大的经济危机。但是当年最重要的故事是 Selenium 和WebDriver 的合并。Selenium 有着丰富的社区和商业支持,但 WebDriver 显然代表着未来的趋势。两者的合并为所有用户提供了一组通用功能,并且借鉴了一些测试自动化领域最闪光的思想。或许,关于两者合并的最好解释,是由 WebDriver 的开发者,在 2009 年 8 月 6 日发出的一封给社区的联合邮件中提到的:
为什么这两个项目要合并?一部分是因为 WebDriver 弥补了 Selenium 的一些短处(例如提供了一组很棒的 API,绕开浏览器的限制),一部分是因为 Selenium 弥补了 WebDriver 的一些短处(例如对浏览器更广泛的支持),还有一部分是因为 Selenium 的主要贡献者和我都认为这样能为用户提供最优秀的框架。
三、使用步骤
1.引入maven依赖
代码如下:
代码语言:javascript复制 <dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.33.0</version>
</dependency>
2.下载相关的浏览器和驱动(很重要,这里做过反爬处理)
点我下载 编译好的Chromedriver,特征已经被抹除目前只有windows10版本
先安装浏览器,然后把驱动chromedriver.exe放入浏览器安装,目录Application目录下即可
3.核心代码
代码如下:
代码语言:javascript复制public static void main(String[] args) {
//参数配置
System.setProperty("webdriver.chrome.driver",
"C:\Program Files\Google\Chrome\Application\chromedriver.exe");
WebDriver driver;
ChromeOptions option = new ChromeOptions();
option.addArguments("no-sandbox");//禁用沙盒
//通过ChromeOptions的setExperimentalOption方法,传下面两个参数来禁止掉谷歌受自动化控制的信息栏
option.setExperimentalOptions("useAutomationExtension", false);
option.setExperimentalOptions("excludeSwitches", Collections.singletonList("enable-automation"));
driver = new ChromeDriver(option);
driver.get("http://www.nhc.gov.cn/renshi/s7753/202012/6c709fb0aa9c480299d4a2b351c16058.shtml");
String html=driver.getPageSource();
// 这里只是打印源码,后续可以根据自己的需求来解析相关的数据
System.out.println(html);
driver.close();
}
结果如下:
总结
成功的重点是一定要使用我这里提供的驱动,如果文章中有哪里没有讲明白,或者讲解有误的地方,欢迎在评论区批评指正!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154053.html原文链接:https://javaforall.cn