背景
抓数据时,遇到困难。准备直接用Selenium把站点打开,拿到cookies。再进行抓取。
实验环境
- windows7
- firefox_55.0.3(64-bit)
- geckodriver 0.18.0 for Firefox
简介
Selenium webdriver 是一个用于web应用程序的自动化测试工具。
具有一系列的API来操作浏览器。
可以模拟用户操作页面元素。
主要步骤
配置参数,初始化driver
加载url
等待页面加载
获取页面元素
操作页面元素
获取 cookies
保存cookies
所需要的依赖
在pom.xml的dependencies中加入
1 2 3 4 5 6 7 8 9 10 11
| <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>fluent-hc</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-firefox-driver</artifactId> <version>3.5.3</version> </dependency>
|
要在https://github.com/mozilla/geckodriver/releases 中把geckodriver.exe给下载下来
注意事项
如果遇到稀奇古怪的错误检查下各组件的版本号是否匹配。
不同版本可能api的操作方式不一样
示例代码
代码实现了在百度中输入123,并搜索,然后保存cookies和页面结果的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.Iterator; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.logging.Level;
import org.apache.http.client.CookieStore; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.cookie.BasicClientCookie; import org.openqa.selenium.By; import org.openqa.selenium.Cookie; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions;
public class Main {
public static void main(String[] args) throws IOException { System.setProperty("webdriver.gecko.driver", "C:/bin/geckodriver.exe"); FirefoxOptions firefoxOptions = new FirefoxOptions(); firefoxOptions.setLogLevel(Level.ALL); FirefoxDriver driver = new FirefoxDriver(firefoxOptions); String baseUrl = "https://www.baidu.com"; driver.get(baseUrl); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
WebElement keyword= driver.findElement(By.id("kw")); keyword.sendKeys("123"); WebElement submit= driver.findElement(By.id("su")); submit.click(); FileOutputStream fos = new FileOutputStream("sourc.html"); fos.write(driver.getPageSource().getBytes()); fos.close(); Set<org.openqa.selenium.Cookie> cookies = driver.manage().getCookies(); System.out.println("Size: " + cookies.size()); Iterator<org.openqa.selenium.Cookie> itr = cookies.iterator(); CookieStore cookieStore = new BasicCookieStore(); while (itr.hasNext()) { Cookie cookie = itr.next(); BasicClientCookie bcco = new BasicClientCookie(cookie.getName(), cookie.getValue()); bcco.setDomain(cookie.getDomain()); bcco.setPath(cookie.getPath()); cookieStore.addCookie(bcco); } ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("cookies"))); oos.writeObject(cookieStore); oos.close(); }
|