使用 chromedriver 實現網絡爬蟲【手抄】
?
1、引用 selenium 包
2、下載 chromedriver
下載地址:
這里引用包支持版本為 114,我下載使用的是 114.0.5734.0,分為 windows版本以及 linux 版本。

114這個版本的 chromedriver 軟件將放在源碼中供大家學習使用。
3、對應的瀏覽器下載
由于chromedriver 最新版本為 114所以,最新的 chrome瀏覽器無法使用只能下載114這個版本chrome瀏覽器。
linux 下載地址:
windows下載地址:
4、具體現實代碼
public static void main(String[] args) throws IOException {
// 設置 ChromeDriver 路徑
System.setProperty("webdriver.chrome.driver", "D:\\Project\\web-crawler\\chromedriver\\chromedriver.exe");
// 配置 Chrome 瀏覽器
ChromeOptions options = new ChromeOptions();
// 如果不想顯示瀏覽器界面
// options.addArguments("--headless");
// 設置啟動時最大化瀏覽器窗口
options.addArguments("--start-maximized");
// 指定瀏覽器位置
options.setBinary("D:\\Project\\web-crawler\\chrome-windows\\chrome.exe");
WebDriver driver = new ChromeDriver(options);
driver.get("http://182.131.3.xxx:8000/noticerpt/user/popup_login");
// 顯式等待,確保登錄頁面加載完成
WebDriverWait loginWait = new WebDriverWait(driver, Duration.ofSeconds(30));
// 獲取背景圖和拼圖塊
// 拼圖背景圖
WebElement button = loginWait.until(ExpectedConditions.presenceOfElementLocated(By.className("button4")));
button.click();
WebElement automv = loginWait.until(ExpectedConditions.presenceOfElementLocated(By.id("automv_1")));
WebElement aBtn = automv.findElement(By.tagName("a"));
aBtn.click();
// 拼圖塊
WebElement nav = driver.findElement(By.id("nav"));
List<WebElement> elementList = nav.findElements(By.tagName("li"));
WebElement navLi = elementList.get(1);
WebElement navLiA = navLi.findElement(By.tagName("a"));
navLiA.click();
WebElement smsLoginFormsc = driver.findElement(By.id("smsLoginFormsc"));
WebElement embedCaptchaSms = smsLoginFormsc.findElement(By.id("embed-captcha-sms"));
WebElement gtSlider = embedCaptchaSms.findElement(By.className("gt_slider"));
WebElement gtSliderKnob = gtSlider.findElement(By.className("gt_slider_knob"));
new Actions(driver).moveToElement(gtSliderKnob).perform();
// WebElement gtWidget = smsLoginFormsc.findElement(By.className("gt_widget"));
// WebElement gtWidget = smsLoginFormsc.findElement(By.className("gt_widget"));
// WebElement gtWidget = smsLoginFormsc.findElement(By.className("gt_widget"));
// 獲取拼圖塊的位置
// Point sliderPosition = slider.getLocation();
// System.out.println("拼圖塊的初始位置: " + sliderPosition);
// // 計算缺失的拼圖塊位置(假設通過圖像處理得出:x = 200, y = 0)
// int targetX = 200;
// int targetY = 0;
// String imageUrl = backgroundElement.getAttribute("src");
// BufferedImage background = ImageIO.read(new URL(imageUrl));
// imageUrl = puzzlePieceElement.getAttribute("src");
// BufferedImage puzzlePiece = ImageIO.read(new URL(imageUrl));
//
// // 比較兩張圖片的差異
// int diffX = 0;
// int diffY = 0;
//
// for (int y = 0; y < background.getHeight(); y++) {
// for (int x = 0; x < background.getWidth(); x++) {
// int bgPixel = background.getRGB(x, y);
// int puzzlePixel = puzzlePiece.getRGB(x, y);
//
// if (bgPixel != puzzlePixel) {
// diffX = x;
// diffY = y;
// break;
// }
// }
// }
// 獲取拼圖塊的當前位置
// Point start = slider.getLocation();
// // 模擬滑動拼圖塊
// Actions actions = new Actions(driver);
// actions.clickAndHold(slider)
// .moveByOffset(targetX - start.getX(), targetY - start.getY())
// .release()
// .perform();
// 等待拼圖驗證完成
// WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
// wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("success-message")));
//
// System.out.println("拼圖解鎖成功!");
// 關閉瀏覽器
// driver.quit();
}
以上代碼主要就是實現關閉彈窗、顯示滑動拼圖驗證碼。其中代碼
http://182.131.3.xxx:8000/noticerpt/user/popup_login xxx 為了安逸將最后一段修改為了XXX根據邏輯可以修改為自己的業務需求
5、總結
只是個人作為研究的手抄還是有很多不足,而且具體邏輯也沒有寫(但是會持續的更新)
6、代碼
爬蟲代碼:
如果覺得還不錯誤,請支持一下作者開源框架
?

浙公網安備 33010602011771號