Java爬虫第二篇:模拟登录CSDN
概述
本章讲解模拟登录CSDN。
由于CSDN登录页面加入扫码登录,不能直接获取到账号登录页面,因此需要在页面执行动作,切换到账号登录操作。
1. selenium maven配置
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.13.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.13.0</version>
</dependency>
2. chromedriver 本地路径配置
public class SeleniumUtil {
public final static String CHROMEDRIVERPATH = "D://soft//chromedriver.exe";
public static void sleep(int m) {
try {
Thread.sleep(m);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
3. 测试
public class Test{
public static void main(String[] args) {
String username = "xxxx@163.com";
String password = "***********";
String url = "https://passport.csdn.net/login";
System.setProperty("webdriver.chrome.driver", SeleniumUtil.CHROMEDRIVERPATH );// chromedriver localPath
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("–no-sandbox"); //--start-maximized
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get(url);
SeleniumUtil.sleep(1000);
WebElement mainSelectE = driver.findElement(By.cssSelector(".main-select"));
List<WebElement> loginType = mainSelectE.findElements(By.tagName("a"));
bgm:for (int i = 0; i < loginType.size(); i++) {
WebElement aelement = loginType.get(i);
if( aelement.getText().indexOf("帐号登录") != -1){
aelement.click();
System.out.println("切换到帐号登录....");
break bgm;
}
}
System.out.println("继续操作....");
SeleniumUtil.sleep(1000);
WebElement formE = driver.findElement(By.cssSelector("form"));
WebElement nameE = formE.findElement(By.id("all"));
WebElement passwordE = formE.findElement(By.id("password"));
nameE.sendKeys(username);
formE.findElement(By.id("password-number")).sendKeys(password);
formE.findElement(By.cssSelector("button")).click();
System.out.println(driver.manage().getCookies());
}
}