selenium获取页面数据入数据库

Selenium是一个用于Web应用程序测试的工具,但是也可以爬取页面中的数据。

开发环境是内网(局域网),项目工程是web项目,jdk使用的1.8,tomcat使用的 8。

web项目: 启动时使用tomcat, tomcat会先加载web.xml配置文件里内容;
maven项目: 和web项目的区别是,需要的jar包,交给maven维护,不用自己导入jar包;
java项目: 启动时,使用main方法,没有web.xml配置文件;

一、创建项目
在这里插入图片描述
web.xml:web项目的配置文件,随着tomcat启动而加载;
TimerConfig.xml:springMVC定时配置文件;
proxool.xml: 配置数据库连接池;
log4j.properties:日志文件;
hibernate.cfg.xml: hibernate配置文件;
LoadsRealTimeTask: 定时任务类;

二、环境准备

1、导入selenium所需要的包
在这里插入图片描述
2、导入项目所需要的包
3、安装chromedriver.exe
因为我使用的谷歌浏览器来打开页面,所以需要将chromedriver.exe安装到Chrome目录下。
在这里插入图片描述

三、编写代码

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>GDreptile</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><!-- 定时器配置文件--><context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/TimerConfig.xml</param-value> </context-param><listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- proxool --><servlet><servlet-name>ServletConfigurator</servlet-name><servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class><init-param><param-name>xmlFile</param-name><param-value>/WEB-INF/proxool.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- proxool提供的管理监控工具,可查看当前数据库连接情况。如果运行不成功,请删除本行 --><servlet><servlet-name>Admin</servlet-name><servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class></servlet><servlet-mapping><servlet-name>Admin</servlet-name><url-pattern>/admin</url-pattern></servlet-mapping>
</web-app>

TimerConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.1.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd"><!-- springMVC 定时器开关 --><task:annotation-driven /><bean id="historyTask" class="com.sgcc.gridDispa.LoadsHistoryTask"></bean><bean id="realTimeTask" class="com.sgcc.gridDispa.LoadsRealTimeTask"></bean><task:scheduled-tasks><task:scheduled ref="historyTask" method="run" cron="0 30 7 * * ?" />   <!-- 这里表示的是每天7:30执行一次    --> <task:scheduled ref="realTimeTask" method="run" cron="0 20 0-23 * * ?" />  <!-- 这里表示的是每小时20分执行一次     --></task:scheduled-tasks></beans>  

proxool.xml

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely><proxool>  <alias>proxoolpool</alias><driver-url>jdbc:oracle:thin:@XX.XX.XX.XX:1521/XXXXX</driver-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <driver-properties>   <property name="user" value="XXXXX" />  <property name="password" value="XXXXX" /> </driver-properties> <maximum-connection-count>200</maximum-connection-count><minimum-connection-count>10</minimum-connection-count>     <house-keeping-sleep-time>30000</house-keeping-sleep-time>  <maximum-new-connections>10</maximum-new-connections>    <prototype-count>5</prototype-count>    <test-before-use>true</test-before-use>  <house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql>  </proxool>  </something-else-entirely>

log4j.properties

log4j.rootLogger=DEBUG,console,FILE  log4j.appender.console=org.apache.log4j.ConsoleAppender  
log4j.appender.console.threshold=INFO  
log4j.appender.console.layout=org.apache.log4j.PatternLayout  
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [%5p] - %c -%F(%L) -%m%n  log4j.appender.FILE=org.apache.log4j.RollingFileAppender  
log4j.appender.FILE.Append=true  
log4j.appender.FILE.File=D:/log/pachong/logs
log4j.appender.FILE.Threshold=INFO  
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout  
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [%5p] - %c -%F(%L) -%m%n  
log4j.appender.FILE.MaxFileSize=10MB     

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>
<session-factory><!-- hibernate自身属性相关参数 --><property name="dialect">com.sgcc.gridDispa.utils.BlobOracleDialect</property><!-- <property name="hbm2ddl.auto">update</property> --><property name="hibernate.jdbc.batch_size">50</property><!-- 设置连接数 --><!-- <property name="connection.pool_size">60</property> --><property name="show_sql">false</property><property name="format_sql">false</property><property name="current_session_context_class">thread</property><!-- 提交事务后关闭连接 --><property name="connection.release_mode">after_transaction</property><!-- 提交事务后关闭会话 --><property name="transaction.auto_close_session">true</property><!-- 统计信息 --><property name="hibernate.generate_statistics">true</property><!-- proxool连接池 --><property name="hibernate.proxool.pool_alias">proxoolpool</property><property name="hibernate.proxool.xml">proxool.xml</property><property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property><property name="hibernate.proxool.existing_pool">true</property><!-- 映射文件的注册 --><mapping resource="com/sgcc/gridDispa/po/LoadsHistory.hbm.xml" /><mapping resource="com/sgcc/gridDispa/po/LoadsToday.hbm.xml" /><mapping resource="com/sgcc/gridDispa/po/TgridLoads.hbm.xml" /><mapping resource="com/sgcc/gridDispa/po/LoadsRealTime.hbm.xml" /></session-factory>
</hibernate-configuration>    

LoadsRealTimeTask

package com.sgcc.gridDispa;import java.util.TimerTask;import com.sgcc.gridDispa.impl.LoadsHistoryImpl;
import com.sgcc.gridDispa.impl.LoadsRealTimeImpl;public class LoadsRealTimeTask extends TimerTask{LoadsRealTimeImpl tsk= new LoadsRealTimeImpl();@Overridepublic void run() {try {Thread thread=new Thread(tsk);thread.start();} catch (Exception e) {e.printStackTrace();}}
}

utils文件夹下
在这里插入图片描述
WebDriverUtil.java

package com.sgcc.gridDispa.utils;import java.util.concurrent.TimeUnit;import org.openqa.selenium.Dimension;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.remote.CapabilityType;/*** @Description:crawler* @Author: old* @CreateTime:2017-11-15 :15:16:16*/
public class WebDriverUtil {/*** 创建Chrome** @param path 路径* @return* @throws Exception*/public static WebDriver createChromeWebDriver(String path) throws Exception {if (path == null || "".equals(path)) {throw new Exception("配置错误, 没有配置:chrome path");}System.setProperty("webdriver.chrome.driver", path);WebDriver webDriver = new ChromeDriver();webDriver.manage().timeouts().pageLoadTimeout(1200, TimeUnit.SECONDS);webDriver.manage().window().setSize(new Dimension(1024, 768));return webDriver;}}

LogWriter.java

package com.sgcc.gridDispa.utils;import org.apache.log4j.Logger;public class LogWriter {private static Logger logger  = Logger.getLogger(LogWriter.class);public static void error(Object obj){logger.error(obj);}public static void error(Object message,Throwable obj){logger.error(message,obj);}public static void info(Object obj){logger.info(obj);}public static String getError(Throwable e){StringBuilder sb=new StringBuilder();sb.append(e.toString()+System.getProperty("line.separator"));StackTraceElement[] trace = e.getStackTrace();for (int i=0; i < trace.length; i++)sb.append("\tat " + trace[i]+System.getProperty("line.separator"));return sb.toString();}
}

JDBCUtil.java

package com.sgcc.gridDispa.utils;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.stat.SessionStatistics;
import org.hibernate.stat.Statistics;
/*** 获得hibernate session对象* @author kuang**/
public final class JDBCUtil {private static SessionFactory sessionFactory ;private JDBCUtil(){}static{try{sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();}catch(Exception e){e.printStackTrace();LogWriter.error(e);}}public static Session getThreadSession(){return sessionFactory.getCurrentSession();}public static Session noOpen(){return getThreadSession();}public static  Session open(){getThreadSession().beginTransaction();return getThreadSession();}public static void commit(){getThreadSession().getTransaction().commit();getThreadSession().close();}public static void close(){if(getThreadSession()!=null)getThreadSession().close();}public static void getStatistics(){SessionStatistics ss = getThreadSession().getStatistics();LogWriter.info("SessionStatistics:"+ss);Statistics st = sessionFactory.getStatistics();LogWriter.info("Statistics:"+st);}public static void rollback(){getThreadSession().getTransaction().rollback();}
}

BlobOracleDialect.java

package com.sgcc.gridDispa.utils;import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.dialect.OracleDialect;public class BlobOracleDialect extends OracleDialect {public BlobOracleDialect(){super();registerHibernateType(Types.LONGVARBINARY,Hibernate.BLOB.getName());}
}

BasicDaoImpl.java

package com.sgcc.gridDispa.utils;import java.util.List;import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.transform.Transformers;//obj的属性名
public class BasicDaoImpl<T>  {/** 保存实体对象*/public void saveOrUpdate(T t) {try {JDBCUtil.open().save(t);JDBCUtil.commit();} catch (HibernateException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{JDBCUtil.close();}}/** 查询sql,返回list*/public List queryListBySql(String sql){try {Session session =JDBCUtil.open();SQLQuery sqlQuery = session.createSQLQuery(sql);List result = sqlQuery.list();JDBCUtil.commit();return result;} catch (HibernateException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{JDBCUtil.close();}return null;}/** 查询sql,返回list Map*/public List queryListMapBySql(String sql){try {Session session =JDBCUtil.open();SQLQuery sqlQuery = session.createSQLQuery(sql);Query query =sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);List result = sqlQuery.list();JDBCUtil.commit();return result;} catch (HibernateException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{JDBCUtil.close();}return null;}/*** 对获取到的气象数据进行过滤,对无效、null进行处理* @return 过滤后的数据*/protected  String filterMothed(String object) {if(object.contains("9999")){return "";}if(object.equals("null")){return "";}if(object==null){return "";}return object.trim();}
}

impl文件夹下:

LoadsRealTimeImpl.java

package com.sgcc.gridDispa.impl;import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;import org.apache.log4j.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;import com.sgcc.gridDispa.po.LoadsHistory;
import com.sgcc.gridDispa.po.LoadsRealTime;
import com.sgcc.gridDispa.utils.BasicDaoImpl;
import com.sgcc.gridDispa.utils.WebDriverUtil;public class LoadsRealTimeImpl  extends BasicDaoImpl implements Runnable{private Logger logger=Logger.getLogger(LoadsRealTimeImpl.class);@Overridepublic void run() {logger.info("=======各省实时负荷数据【定时任务】===============");saveAllRealTimeLoad();}/***  将各省实时负荷数据写入数据库*/public synchronized void saveAllRealTimeLoad(){WebDriver webDriver = null;try {webDriver = WebDriverUtil.createChromeWebDriver("D:\\chrome\\Chrome\\Application\\chromedriver.exe");/*webDriver = WebDriverUtil.createChromeWebDriver("D:\\基础软件\\Chrome\\Application\\chromedriver.exe");*/webDriver.get("http://10.19.13.50:8080//MWWebSite//PROJECT-HOME//exchange//YYJC//AJBZHDPSJ.jsp");Thread.sleep(3000);System.out.println(webDriver.getTitle());System.out.println(webDriver.getPageSource());WebElement  webBody=webDriver.findElement(By.xpath("//body"));String bodyStr=webBody.getText();String[] bodyStrs=bodyStr.split("\n");String  bool=",";for (int i = 47; i < bodyStrs.length; i++) {String date="";if(i==47){int index=bodyStrs[0].indexOf("='");date=bodyStrs[0].substring(index+2, index+12);}if(i>=49 && i<=85){String allLoad=bodyStrs[i].replaceAll("\\s{2,}", ",").trim();String[] allLoadStr=allLoad.split(",");LoadsRealTime loadRealTime = new LoadsRealTime();loadRealTime.setDeptName(allLoadStr[1]); //电网名称//处理电网、省公司idif(allLoadStr[1].equals("华北电网") || allLoadStr[1].equals("华东电网") || allLoadStr[1].equals("华中电网") || allLoadStr[1].equals("东北电网") || allLoadStr[1].equals("西北电网") || allLoadStr[1].equals("西南电网")){List<Map> result = queryAreaIdByname(allLoadStr[1]);if(result.size() >0){for(Map map : result){String companyId = map.get("COMPANY_ID").toString();loadRealTime.setDeptId(companyId);}}}else{List<Map> result = queryCompanyIdByname(allLoadStr[1]);if(result.size() >0){for(Map map : result){String companyId = map.get("COMPANY_ID").toString();loadRealTime.setDeptId(companyId);}}}Float yesterdayLoad = Float.parseFloat(allLoadStr[2])/10; //实时负荷loadRealTime.setRealtimeLoad(Math.round(yesterdayLoad)+"");SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");int index = allLoadStr[3].indexOf("'");String rkTime=allLoadStr[3].substring(index+1, index+20);loadRealTime.setRkTie(format.parse(rkTime));this.saveOrUpdate(loadRealTime);}}} catch (Exception e) {e.printStackTrace();} finally {if (webDriver != null) {//webDriver.close();webDriver.quit();}}}/*** 根据省公司名称查询公司id*/private List queryCompanyIdByname(String companyName){String sql= "select y.company_id from t_company y  where  y.dwjb='3' ";if(companyName != null && !companyName.equals("")){sql +=  "and y.company_name  like '%" + companyName + "%' ";}return this.queryListMapBySql(sql);}/*** 根据各分部电网查询分部id*/private List queryAreaIdByname(String companyName){String sql= "select y.company_id from t_company y  where  y.dwjb='2' ";if(companyName != null && !companyName.equals("")){companyName = companyName.replace("电网", "");sql +=  "and y.company_name  like '%" + companyName + "%' ";}	return this.queryListMapBySql(sql);}
}

四、页面中数据

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37298.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 教我用 200 行代码写一个简版 Vue 框架 - OpenTiny

AI 是未来最好的老师 最近&#xff0c;我正在准备一份关于 Vue 基础的学习材料。期间我突发奇想&#xff1a;能否利用现在热门的 ChatGPT 帮我创建学习内容&#xff1f;其实 Vue 本身不难学&#xff0c;特别是基础用法&#xff0c;但是&#xff0c;如果你想深入掌握 Vue&#…

阿里云AliGenie开发天猫语音功能-入门篇

文章目录结构如下 登录应用开发平台 创建语音技能 云开发部署后端技能服务 语音技能测试 下线不必要的应用 一、登录应用开发平台 1.登录云开发平台。打开网址 https://workbench.aliyun.com/&#xff0c;使用阿里云账号登录&#xff0c;按照提示创建团队&#xff0c;点…

ESP8266对接天猫精灵-多路继电器控制

上面是我的微信和QQ群&#xff0c;欢迎新朋友的加入。 资源和烧录我就不管了&#xff0c;和https://blog.csdn.net/Jun626/article/details/109150006一模一样 把那个kaiguan的lua改一下代码 DEVICEID "19539" APIKEY "17aaa8a16" INPUTID "…

php对接AliGenie天猫精灵服务器控制智能硬件esp8266③ 渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!

本系列博客学习由非官方人员 半颗心脏 潜心所力所写&#xff0c;仅仅做个人技术交流分享&#xff0c;不做任何商业用途。如有不对之处&#xff0c;请留言&#xff0c;本人及时更改。 1、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266① 在阿里云购买搭建私有云服务器&…

智能家居领域小米,涂鸦,天猫精灵的 “中台之战”

深圳是跨境电商之都&#xff0c;仅一个华南城就云集了不少了全球排名前五十的亚马逊大卖家。总部不在深圳的跨境电商通常都会在深圳设立主抓供应链的分部。在今年这样疫情叠加外部环境不确定性的当下&#xff0c;大卖家们的日子按道理说不会好过&#xff0c;然而事实却大大出乎…

ESP8266-天猫精灵(智能家居)

本次更新与2018年10月2日 &#xff08;弊端&#xff1a;wifi的配置在程序里边&#xff0c;设备更换所连接的wifi&#xff0c;还需要重新烧录初始化程序&#xff09;——问题已解决&#xff0c;更新于博客最下方。 1&#xff1a;使用器材 天猫精灵、esp8266、LED(继电器) &am…

六级备考23天|CET-6|写作技巧1|开头段模版

目录 1 考前注意事项 2 真题参考 3 六级作文三段式 第一段 第二段 第三段 4 名言解释型作文 5 开头段的模版 why 型 6 选择型开头模版 7 国内学校/出国读书 8 团队精神和交流 9 作业 10 抽象意志品质类开头 ​ 11 信任的重要性​ 1 考前注意事项 定位错误 常识干扰 拼凑…

雅思英语作文计算机和历史,雅思考试|历史真题帮你搞定雅思写作3大高频话题-科技篇...

科技类 题目1 计算机让人们在家工作学习的利弊 Computers enable people to be able to work at home and children to study at home. Some people believe that it is convenient and cost-saving. Do you think the phenomenon positive or negative? 题目解读&#xff1a;…

六级备考21天|CET-6|写作技巧2|13:00~14:40

目录 【一】写作技巧1的作业 [1]Creativity [2]谚语&#xff1a;值得做的就值得做得好 [3]Star chasing 追星​ [4]team spirit&communication 团队精神和交流 [5]谚语&#xff1a;理解​ 【二】谚语重要性开头模版 [1]谚语&#xff1a;Understand 理解 【三】社会…

通过python批量获取阿里云账号余额并发送到钉钉群

脚本执行结果如下图 亲测可用 首先更新安装python版本 默认2.7.5太低无法使用 这里使用3.7.9版本 安装编译插件 yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel…

【python】使用apikey查询OpenAi可用余额

2023.04.02似乎官方禁用了之前的获取方式&#xff0c;通过https://api.openai.com/dashboard/billing/credit_grants将会得到如下回复 Your request to GET /dashboard/billing/credit_grants must be made with a session key (that is, it can only be made from the browse…

ChatGPT 可能会阻碍网络安全行业的发展

自 2022 年 <> 月推出以来&#xff0c;人工智能 &#xff08;AI&#xff09; 聊天机器人 ChatGPT 因其令人惊讶的人性化和准确的响应而引起了不小的轰动。 自动生成系统在推出仅两个月后就达到了创纪录的 100 亿月活跃用户。然而&#xff0c;虽然它的受欢迎程度持续增长…

CAD做图常用的命令

1.熟练掌握一些常用的命令,并理解各参数的用法,也就20-40个命令, 2.掌握常用命令的快捷键,对有些命令可以了解. 3.边做边学,我用cad已经2年了,有些命令也不完全了解,用时再查看资料学习. 4.对照教科书一步一步,反复的做,一定要注意多回头想想 5.熟练掌握图层的用法 6.尽量在学习…

CAD绘图软件_常用指令

CAD软件介绍 CAD首先它是一个可视化的绘图软件&#xff0c;许多命令和操作可以通过菜单选项和工具按钮等多种方式实现。而且具有丰富的绘图和绘图辅助功能&#xff0c;如实体绘制、关键点编辑、对象捕捉、标注、鸟瞰显示控制等&#xff0c;它的工具栏、菜单设计、对话框、图形…

CAD使用命令绘图

参考https://xlncad.com/scripting-in-autocad/ 我们可以新建一个scr后缀的脚本文件 circle 10,10 10 ;画圆&#xff0c;坐标是10,10&#xff0c;半径是10&#xff09; polygon 5 30,30 i 30 ;画多边形&#xff0c;五边形&#xff0c;中⼼点坐标是30,30&#xff0c;内切圆&a…

完美解决textarea字数限制[转载]

###原文地址&#xff1a;https://blog.csdn.net/fb_01/article/details/51026774 input、textarea都有maxlength属性&#xff0c;但是textarea不兼容ie8/9&#xff0c;input兼容ie8/9。同时绑定onchange、onkeydown、onkeyup&#xff0c;ie8/9下解决不了右键粘贴问题。具体代码…

开源项目|EasyOCR一款实用的图片OCR文字识别项目

欢迎关注「全栈工程师修炼指南」 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&#x…

在英特尔锐炫™独立显卡运行类ChatGPT的开源大语言模型(LLM) Dolly 2.0

作者&#xff1a;李翊玮 & Aidova, Ekaterina 前言&#xff1a; 以下为当前一代大型语言模型&#xff08;LLM&#xff09;的基石说明。 人类偏好强化学习Reinforcement learning with human preferences&#xff08;RLHF&#xff09;和InstructGPT等技术一直是ChatGPT和…

《赛博朋克2077》推出游戏概念艺术图海报

在上个月的时候&#xff0c;《赛博朋克2077》官方曾公布过一些游戏概念艺术图。这些艺术图分别代表了新刻奇主义、新军权主义、刻奇主义、熵增主义这四个词汇在游戏中的表现。而最近官方把这四张图片制作成了海报并在CDRP商城出售。让我们一起来看一看吧&#xff01; “新刻奇主…