欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

webMagic获取cookie登陆

程序员文章站 2022-05-02 22:12:41
...

想要爬取的网站需要登录时,可以用Selenium模拟浏览器登陆,获取cookie,设置到webMagic的site中。

 

使用selenium,配置maven依赖

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.48.0</version>
        </dependency>

注意:selenium 3.0以上版本需要java8。

 

模拟浏览器登陆,需要浏览器驱动,我使用的是Chrome,驱动Chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html。

注意Chromedriver和Chrome对应版本。

下载之后配置Chromedriver的环境变量,不配置也可以在代码里注册驱动。

System.setProperty("webdriver.chrome.driver",
	"D:/chromedriver/chromedriver.exe"); // 注册驱动

然后打开浏览器,设置用户名,密码进行登陆。

 

完整代码

package us.codecraft.webmagic.processor.example;

import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;

public class WebMagic implements PageProcessor {
	private Site site = Site
			.me()
			.setRetryTimes(3)
			.setSleepTime(1000)
			.setTimeOut(10000)
			.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
			.addHeader("Connection", "keep-alive")
			.addHeader("X-Requested-With", "XMLHttpRequest")
			.addHeader("Content-Type",
					"application/x-www-form-urlencoded;charset=utf-8")
			.addHeader(
					"User-Agent",
					"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
	// 用来存储cookie信息
	private Set<Cookie> cookies;

	@Override
	public void process(Page page) {

		// 抓取规则

	}

	@Override
	public Site getSite() {

		// 将获取到的cookie信息添加到webmagic中
		for (Cookie cookie : cookies) {
			site.addCookie(cookie.getName().toString(), cookie.getValue()
					.toString());
		}

		return site;
	}

	public void login() {
		// 登陆
		System.setProperty("webdriver.chrome.driver",
				"D:/chromedriver/chromedriver.exe"); // 注册驱动
		WebDriver driver = new ChromeDriver();

		driver.get("");// 打开网址

		// 防止页面未能及时加载出来而设置一段时间延迟
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		// 设置用户名密码
		driver.findElement(By.id("username")).sendKeys("用户名"); // 用户名
		driver.findElement(By.id("password")).sendKeys("密码"); // 密码
		// 模拟点击
		driver.findElement(By.xpath("//form[@id='form-group-login']/button"))
				.click(); // xpath语言:id为form-group-login的form下的button

		// 防止页面未能及时加载出来而设置一段时间延迟
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		// 获取cookie信息
		cookies = driver.manage().getCookies();

		driver.close();

	}

	public static void main(String[] args) {

		String url = ""; // 地址

		WebMagic dome = new WebMagic();
		dome.login(); // 登陆
		Spider.create(dome).addUrl(url).thread(5).start();
	}
}

参考:https://blog.csdn.net/qixinbruce/article/details/71105444

参考:https://blog.csdn.net/LEoe_/article/details/72934365

 

相关标签: webMagic Selenium