selenium+java入門demo
阿新 • • 發佈:2018-11-28
看到這裡,我就不介紹太多的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(); } } }