IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium自动测试抓取股票信息 -> 正文阅读

[开发测试]selenium自动测试抓取股票信息

主要功能:
1、启动浏览器
2、浏览器访问URL
3、模拟点击链接
4、selenium抓取新页面中的内容
准备工作:
1、谷歌浏览器
2、谷歌浏览器驱动点击下载驱动
3、代码下载源码地址
驱动下载后放到指定目录入:D://selenium//

创建maven project
引入pom配置文件:

org.seleniumhq.selenium selenium-java 3.4.0

定义java类,启动浏览器驱动:

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

public class ChromeUtils {

public static WebDriver getDriver() {
	//设置浏览器驱动
	System.setProperty("webdriver.chrome.driver", "D:/selenium/chromedriver.exe");
	return new ChromeDriver(); // Chrome浏览器
}

public static void main(String[] args) {
	getDriver();
}

}

所有的代码:
package com.gp.www.zhuaqu;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

import com.gp.www.util.ChromeUtils;
import com.gp.www.util.DateTimeUtils;
import com.gp.www.util.FileUtils;
import com.gp.www.util.ThreadUtils;

/**

  • 循环遍历股票代码,获取所有股票的基本信息
  • @author wuyb

*/
public class GetGuPiaoInfo {

private WebDriver driver = null;

private BufferedReader bufferedReader;

private int count=0; //记录处理的个数

private int top =30;//当前焦点与上边距的距离

private void getInfo() {
	driver = ChromeUtils.getDriver(); // Chrome浏览器
	driver.get("http://quote.eastmoney.com/center/gridlist.html#hs_a_board");

	// 获取总页数 根据页面的样式 获取股票列表的总页数
	WebElement span = driver.findElement(By.cssSelector(".paginate_page"));
	List<WebElement> hrefs = span.findElements(By.tagName("a"));
	WebElement a = hrefs.get(hrefs.size() - 1);
	String totalPageStr = a.getText();
	System.out.println(totalPageStr);
	int totalPage = Integer.parseInt(totalPageStr);

	//按总页数循环遍历
	for (int i = 0; i < totalPage; i++) {
		
		//1股票信息以table表格的形式展示 先获取table信息
		WebElement table = driver.findElement(By.id("table_wrapper-table"));
		System.out.println("table:" + table);

		//2获取每一行的信息
		List<WebElement> trs = table.findElements(By.tagName("tr"));
		System.out.println("trs:" + trs.size());

		// 逐个股票处理 按行处理
		trs.stream().forEach(x -> anlizeTr(x));

		// 模拟点击下一页处理
		WebElement next = driver.findElement(By.cssSelector(".next"));
		next.click();

		System.out.println("点击下一页" + (i + 2));

		ThreadUtils.sleep(3000);
		count=0;
		scrollBy();
		((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", table);  
	}
	
	try {
		bufferedReader.close();
		FileUtils.closeFileWrite();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

//处理页面中一行的记录
public void anlizeTr(WebElement x) {
	//获取tr中的所有td
	List<WebElement> tds = x.findElements(By.tagName("td"));
	String code = null;
	if (!tds.isEmpty()) {
		//第二列为股票代码列 可以点击进入股票详细信息页面(子页面)
		code = tds.get(1).getText();
		System.out.println("code:" + tds.get(1).getText() + " name:" + tds.get(2).getText());
		tds.get(2).click();// 弹出单个股票的页面  模拟点击链接
		ThreadUtils.sleep(1000);
		
		//弹出新页面后,需要定位到新弹出的页面 使用如下方法定位到新弹出的页面
		String current = driver.getWindowHandle();//当前使用的页面句柄
		Set<String> handles = driver.getWindowHandles(); //所有打开的页面
		Iterator<String> it = handles.iterator();
		//循环遍历 切换页面句柄
		while (it.hasNext()) {
			String handle = it.next();
			if (!handle.equals(current)) {
				driver = driver.switchTo().window(handle); // 切换到新的句柄所指向的窗口
				break;
			}
		}

		//获取新页面的股票信息
		WebElement table = driver.findElement(By.cssSelector(".yfw"));
		System.out.println("新页面table:" + table);

		ThreadUtils.sleep(800);

		// 获取tr
		List<WebElement> trs = table.findElements(By.tagName("tr"));
		System.out.println("tr的数量:" + trs.size());

		//抓取股票的基本信息
		String text = trs.stream().map(tr -> tr.getText()).collect(Collectors.joining(" "));
		text = DateTimeUtils.getToday() + " " + text;
		System.out.println("基本信息:" + text);

		//将股票信息写入文件
		String path = "G://股票//股票基本信息" + code + ".txt";
		try {
			if(!findStringInFile(path,DateTimeUtils.getToday())) {
				FileUtils.writeToFile(text, path);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		//关闭新窗口(子页面) 并将句柄转移到父页面
		System.out.println("关闭窗口");
		driver.close();
		driver = driver.switchTo().window(current);
		count++;
		ThreadUtils.sleep(800);
		scrollBy();
	}
}

/**
 * 验证文件中是否包含字符串
 * 如果已经有今天的股票信息 则跳过不写入文件
 * @param path
 * @param day
 * @return
 * @throws IOException
 */
public  boolean findStringInFile(String path, String day) throws IOException {
	File file = new File(path);
	if(!file.exists()) {
		return false;
	}
	InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8");// 考虑到编码格式
	bufferedReader = new BufferedReader(read);
	String line = null;
	while ((line = bufferedReader.readLine()) != null) {
		// 指定字符串判断处
		if (line.contains(day)) {
			return true;
		}
	}
	return false;
}

/**
 * 页面上线滑动
 * 当不能获取页面元素时 需要调整这个方法里的参数
 */
private void scrollBy() {
	((JavascriptExecutor) driver).executeScript("window.scrollBy(0, "+(top)+")");
	if(top==0) {
		//页面置顶
		((JavascriptExecutor) driver).executeScript("window.scrollTo(0, 10)");
		
		System.out.println("1111top:顶部");
	}
	System.out.println("1111top:"+(count*top));
}

public void anlizerTd(WebElement tr) {
	System.out.println(tr.getText());
}

public static void main(String[] args) {
	GetGuPiaoInfo gg = new GetGuPiaoInfo();
	gg.getInfo();
}

}

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 12:11:31  更:2021-10-19 12:12:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:56:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码