1. 程式人生 > >selenium+java入門demo

selenium+java入門demo

看到這裡,我就不介紹太多的selenium是什麼了(jar包:https://download.csdn.net/download/qq_40374604/10807974

需要的jar包和常見問題在個人分類的其他文章中

demo中有phantomjs,無瀏覽器訪問,相關文章請看個人部落格爬蟲分類

另外(訪問像微博https://weibo.com/這樣的網站,用到...driver.findElement(By.className("list_title_s"));//查詢這個class,讓程式等待需要的內容載入完成...)(第二篇程式碼)

package net.domain;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;

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

public class SeleniumDynamicWeb {
	public static void main(String[] args) {
		Search();
		//System.setProperty("phantomjs.binary.path", "tools\\phantomjs.exe");//無瀏覽器訪問
		System.setProperty("webdriver.chrome.driver", "tools\\chromedriver.exe");// chromedriver服務地址
		WebDriver driver = new ChromeDriver(); // 新建一個WebDriver 的物件,但是new
												// 的是FirefoxDriver的驅動
		driver.get("http://www.baidu.com");// 開啟指定的網站
		driver.findElement(By.id("kw")).sendKeys(
				new String[] { "rodert_wang csdn" });// 找到kw元素的id,然後輸入hello
		driver.findElement(By.id("su")).click(); // 點選按扭
		try {
			/**
			 * WebDriver自帶了一個智慧等待的方法。
			 * dr.manage().timeouts().implicitlyWait(arg0, arg1);
			 * Arg0:等待的時間長度,int 型別 ; Arg1:等待時間的單位 TimeUnit.SECONDS 一般用秒作為單位。
			 */
			driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
		} catch (Exception e) {
			e.printStackTrace();
		}
		/**
		 * dr.quit()和dr.close()都可以退出瀏覽器,簡單的說一下兩者的區別:第一個close,
		 * 如果打開了多個頁面是關不乾淨的,它只關閉當前的一個頁面。第二個quit,
		 * 是退出了所有Webdriver所有的視窗,退的非常乾淨,所以推薦使用quit最為一個case退出的方法。
		 */
		driver.quit();// 退出瀏覽器
		liulanqi();
	}

	private static void liulanqi() {
		/**
		 * 操作瀏覽器 1、瀏覽器視窗最大化 2、瀏覽器前進 3、瀏覽器後退 4、瀏覽器重新整理 5、瀏覽器切換視窗
		 * 
		 * @author https://me.csdn.net/qq_40374604
		 *
		 */
		String url = "https://blog.csdn.net/qq_40374604/article/details/83996505";
		System.setProperty("webdriver.chrome.driver", "tools\\chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.get(url);
		// 1
		driver.manage().window().maximize();
		driver.findElement(By.linkText("rodert_wang")).click();
		driver.navigate().refresh();// 重新整理頁面
		driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
		driver.navigate().back();// 回退
		driver.navigate().forward();// 前進
		driver.quit();
	}

	private static void Search() {
		/**
		 * 獲取http://www.com頁面中,所有</a>標籤"href"屬性值
		 * 包含英文單詞“place”的URL,並將結果儲存到“d://logSelenim.log”檔案中。
		 * 
		 * @author https://me.csdn.net/qq_40374604
		 *
		 */
		String url = "https://me.csdn.net/qq_40374604";
		System.setProperty("webdriver.chrome.driver", "tools\\chromedriver.exe");
		File file = new File("d://logSelenim.log");
		if (!(file.exists())) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				System.out.println("建立檔案失敗");
				e.printStackTrace();
			}
		}
		WebDriver driver = new ChromeDriver();
		driver.get(url);
		List<WebElement> aList = driver.findElements(By.tagName("a"));
		FileOutputStream fs;
		try {
			fs = new FileOutputStream(file);
			for (WebElement a : aList) {
				String urlStr = a.getAttribute("href");
				System.out.println(urlStr);
				if (urlStr.contains("qq_40374604/article")) {
					urlStr += "\r\n";
					fs.write(urlStr.getBytes());
				}
			}
		} catch (Exception e) {
			System.out.println("檔案寫入失敗");
			e.printStackTrace();
		}finally{
			driver.quit();
		}

	}
}

 

package cn.server;

import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import com.google.gson.JsonArray;

public class ModelSelenium {
	public static String Search(String url) throws InterruptedException {
		/**
		 * 基於selenium
		 * 
		 * @author wangshiyu
		 */
		System.setProperty("webdriver.chrome.driver", "tools\\chromedriver.exe");// chromedriver服務地址
		WebDriver driver = new ChromeDriver();// 新建一個WebDriver 的物件,但是new
		// System.setProperty("phantomjs.binary.path", "tools\\phantomjs.exe");
		// WebDriver driver = new PhantomJSDriver();
		driver.get(url);
		driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
		driver.findElement(By.className("list_title_s"));//查詢這個class,讓程式等待內容載入
		String pageSource = driver.getPageSource();
		driver.manage().window().maximize();
		Thread.sleep(1000);
		getLink(pageSource, url);
		System.out.println(pageSource);
		// driver.quit();
		return pageSource;
	}

	public static JsonArray getLink(String html, String baseUri) {
		JsonArray seedsJsonArray = new JsonArray();
		Document doc = Jsoup.parse(html, baseUri);
		Elements links = doc.select("a[href]");
		Elements media = doc.select("[src]");
		for (Element element : links) {
			String hrefString = element.attr("abs:href");
			if (hrefString.length() > 5) {
				seedsJsonArray.add(hrefString.toString());
			}
		}
		for (Element element : media) {
			String srcString = element.attr("abs:src");
			if (srcString.length() > 5) {
				seedsJsonArray.add(element.attr("abs:src").toString());
			}
		}
		System.out.println("#######" + seedsJsonArray);
		return seedsJsonArray;
	}

	@SuppressWarnings("finally")
	public static String getAbsoluteURL(String baseURI, String relativePath) {
		String abURL = null;
		try {
			URI base = new URI(baseURI);// 基本網頁URI
			URI abs = base.resolve(relativePath);// 解析於上述網頁的相對URL,得到絕對URI
			URL absURL = abs.toURL();// 轉成URL
			abURL = absURL.toString();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (URISyntaxException e) {
			e.printStackTrace();
		} finally {
			return abURL;
		}
	}

	public static void main(String[] args) {
		try {
			String url = "https://weibo.com/";
			Search(url);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}