驱动下载developer.chrome.com/docs/chrome…
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
System.setProperty("webdriver.chrome.driver",
"src/main/resources/ChromeManager/chromedriver-win64/chromedriver.exe");
ChromeOptions options = new ChromeOptions();
String ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36";
options.addArguments("user-agent=" + ua);
ChromeDriver driver = new ChromeDriver(options);
//页面等待
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
driver.get("https://www.damai.cn/");
//隐式等待
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
//脚本等待
driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
WebElement element = driver.findElement(By.cssSelector(".dm-content-wrap .dm-content .box"));
List<WebElement> elements = element.findElements(By.tagName("a"));
elements.forEach((key) -> {
List<WebElement> img = key.findElements(By.tagName("img"));
img.forEach((keys) ->
System.out.println(keys.getAttribute("src"))
);
});
driver.quit();
system.setProperty
配置环境,重要是在配置上,比如爬虫就是将驱动,配置为webdriver.chrome.driver,这个一般官网会指定名称,换句话这是必须的。为什么不使用webManager的maven包管理驱动,最重要的原因是版本问题。但是又引发了另一个问题,如果直接下载下来,网站又很容易探测到。因此必须总结。
- facebook网站就是多次登录后封禁账号,还有社团与个人混合列表。
- 当当,虽然是纯CSS实现反爬,但是时间控度极其不太掌握
因此,反爬与爬虫是相向而行。
class.forName
类加载器,也就是说加载第三方文件必须是类。System.property加载第三方不一定是类
DriverManager.getConnection
数据库连接工具
ServiceLoader.load
服务注册工具,它是Java的SPI工具。当加载类的时候,必须执行迭代器的next方法。
下一期,commons-io与httpclient