- webmagic文档
webmagic文档
如果使用注解无法解析网页内容,可以尝试使用非注解的方式 - selenium文档
selenium文档
2.1 selenium使用本地浏览器
ChromeOptions options = new ChromeOptions();
//隐藏特征
options.addArguments("--disable-infobars"); //禁止策略化
options.addArguments("--no-sandbox"); // 解决DevToolsActivePort文件不存在的报错
options.addArguments("window-size=1920x3000"); // 指定浏览器分辨
options.addArguments("--disable-gpu"); //谷歌文档提到需要加上这个属性来规避bug
options.addArguments("--incognito"); // 隐身模式(无痕模式)
options.addArguments("--disable-javascript"); // 禁用javascript
options.addArguments("--start-maximized"); // 最大化运行(全屏窗口),不设置,取元素会报错
options.addArguments("--disable-infobars"); //禁用浏览器正在被自动化程序控制的提示
options.addArguments("--hide-scrollbars"); //隐藏滚动条, 应对一些特殊页面
options.addArguments("blink-settings=imagesEnabled=false"); //不加载图片, 提升速度
//options.addArguments("--headless"); // 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
options.addArguments("disable-blink-features=AutomationControlled");//禁用 blink 特征
options.setExperimentalOption("excludeSwitches", Arrays.asList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("--remote-allow-origins=*");
options.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
driver = WebDriverManager.chromedriver().clearDriverCache().capabilities(options).create();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);// 设置隐式等待时间为5秒
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);// 设置页面加载超时时间为10秒
driver.get("https://www.baidu.com");
//模拟点击登录按钮
driver.findElement(By.id("TANGRAM__PSP_3__footerULoginBtn")).click();
//在******中填你的用户名
driver.findElement(By.id("TANGRAM__PSP_3__userName")).clear(); driver.findElement(By.id("TANGRAM__PSP_3__userName")).sendKeys("******");
//在*******填你密码
driver.findElement(By.id("TANGRAM__PSP_3__password")).clear();
driver.findElement(By.id("TANGRAM__PSP_3__password")).sendKeys("*******");
driver.findElement(By.id("TANGRAM__PSP_3__submit")).click();
//// actions鼠标对象事件
// Actions actions = new Actions(driver);
// //需要拖拽的web元素
// WebElement source=driver.findElement(By.className("passMod_slide-btn"));
// //拖拽操作
// actions.dragAndDropBy(source, 0, 0);
//获取cookie信息
cookies = driver.manage().getCookies();
driver.close();//关闭当前窗口
driver.quit();//关闭所有窗口
//切换窗口
Set<String> windowHandles = driver.getWindowHandles();
String windowHandle = driver.getWindowHandle();
for (String handle : windowHandles) {
if(!StringUtils.equals(handle, windowHandle)){
driver.close();
driver.switchTo().window(handle);
}
}
2.2 selenium接管浏览器
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
options.addArguments("--remote-debugging-port=9222");
// 打开谷歌浏览器
String command = "cmd /c start chrome --remote-debugging-port=9222";
String command = "cmd /c powershell start chrome --remote-debugging-port=9222";
Process chorme = Runtime.getRuntime().exec(command);
options.setExperimentalOption("debuggerAddress","127.0.0.1:9222");
--remote-debugging-port 这个参数允许我们通过远程的方式连接,让selenium接管
debuggerAddress参数指定浏览器ip和端口
driver = WebDriverManager.chromedriver().clearDriverCache().capabilities(options).create();
// 关闭谷歌浏览器
Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
- springboot文档
springboot文档 - 使用maven添加依赖
排除依赖过多的时候,可以尝试使用bom功能,在父模块添加的依赖中使用
<scope>import</scope> 导入bom,
<selenium.version>4.11.0</selenium.version>
<webmagic.version>0.9.0</webmagic.version>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.version}</version>
<exclusions>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-edge-driver</artifactId>
</exclusion>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
</exclusion>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-xpi-driver</artifactId>
</exclusion>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-ie-driver</artifactId>
</exclusion>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-opera-driver</artifactId>
</exclusion>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-safari-driver</artifactId>
</exclusion>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
</exclusion>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
</dependency>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-selenium</artifactId>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>4.11.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>4.11.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>4.11.0</version>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.3.1</version>
</dependency>
找不到某个类的参数的时候可以尝试更改版本
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.141.59</version>
</dependency>
关键依赖包webdrivermanage解决浏览器和驱动版本不对应的问题,会自动下载32位的浏览器驱动。
具体浏览器版本的选择查看selenium-java支持的devtools版本,高版本的selenium-java需要更高的jdk版本,会超过jdk8版本。
image.png
114版本谷歌浏览器
选择32位版本
https://downzen.com/en/windows/google-chrome/versions/