diff --git a/pom.xml b/pom.xml
index 13c1223219796ce92e2bcfb6abcfee5b63c27db4..dca10a9edf91dacf2842035d5694981235eb4cd3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
cn.heiliu.selenium
selenium-client
- 1.0-SNAPSHOT
+ 1.0.0
1.8
diff --git a/src/main/java/cn/heiliu/selenium/SeleniumManager.java b/src/main/java/cn/heiliu/selenium/SeleniumManager.java
index b34b56eba238a714c8b39a394468a03fb16f7f06..8e63438b34700b19dd062af625d25062bac5e1bc 100644
--- a/src/main/java/cn/heiliu/selenium/SeleniumManager.java
+++ b/src/main/java/cn/heiliu/selenium/SeleniumManager.java
@@ -5,7 +5,6 @@ import cn.heiliu.selenium.service.ISeleniumPoolService;
import cn.heiliu.selenium.service.IWebDriverCreateService;
import cn.heiliu.selenium.service.IWebDriverService;
import cn.heiliu.selenium.service.impl.FirefoxWebDriverCreateServiceImpl;
-import cn.heiliu.selenium.service.impl.FirefoxWebDriverServiceImpl;
import cn.heiliu.selenium.service.impl.SeleniumPoolServiceImpl;
/**
diff --git a/src/main/java/cn/heiliu/selenium/config/SetupConfig.java b/src/main/java/cn/heiliu/selenium/config/SetupConfig.java
index c7fa2895968fc35efe1c0b4922d56a6c156b7db6..e4c2c719d0a36b7c0b5ab0156964c55db84fd99a 100644
--- a/src/main/java/cn/heiliu/selenium/config/SetupConfig.java
+++ b/src/main/java/cn/heiliu/selenium/config/SetupConfig.java
@@ -28,12 +28,6 @@ public class SetupConfig {
@Builder.Default
private int maxFailedNum = 10;
- /**
- * 标志
- */
- @Builder.Default
- private String flag = UUID.randomUUID().toString();
-
/**
* 浏览器执行路径
*/
@@ -66,10 +60,11 @@ public class SetupConfig {
/**
* 获取下载目录
+ * @param uid
* @return
*/
- public String getDownDir() {
- return StrUtil.hasEmpty(downDir) ? flag : downDir + File.separator + flag;
+ public String getDownDir(String uid) {
+ return StrUtil.hasEmpty(downDir) ? uid : StrUtil.removeSuffix(downDir, File.separator) + File.separator + uid;
}
}
diff --git a/src/main/java/cn/heiliu/selenium/service/IWebDriverService.java b/src/main/java/cn/heiliu/selenium/service/IWebDriverService.java
index 77d48745d0c7c847839b2dc78c02a41116454a21..848b6f4c7a5f4a40ed73b261712fa5f584818364 100644
--- a/src/main/java/cn/heiliu/selenium/service/IWebDriverService.java
+++ b/src/main/java/cn/heiliu/selenium/service/IWebDriverService.java
@@ -5,6 +5,8 @@ import cn.heiliu.selenium.domain.WebDriverStatus;
import cn.heiliu.selenium.exception.UnsupportedMethodException;
import org.openqa.selenium.WebDriver;
+import java.nio.file.Path;
+
/**
* @author wangyelou
* @date 2021/6/14
@@ -38,6 +40,18 @@ public interface IWebDriverService extends WebDriver {
*/
public WebDriverStatus getStatus();
+ /**
+ * 加载插件
+ * @param ext
+ */
+ public void installExt(Path ext);
+
+ /**
+ * 重置窗口
+ * @return
+ */
+ public String resetWindow();
+
/**
* 禁止使用该方法
* @return
diff --git a/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverCreateServiceImpl.java b/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverCreateServiceImpl.java
index 2477d462f5b0a6d4d70e7d3788049706efe1d252..0e9578b41a093fc4ea4f12183edfbf0bd7700f72 100644
--- a/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverCreateServiceImpl.java
+++ b/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverCreateServiceImpl.java
@@ -3,6 +3,7 @@ package cn.heiliu.selenium.service.impl;
import cn.heiliu.selenium.config.SetupConfig;
import cn.heiliu.selenium.service.IWebDriverCreateService;
import cn.heiliu.selenium.service.IWebDriverService;
+import cn.hutool.core.util.IdUtil;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
@@ -17,16 +18,20 @@ import java.io.File;
public class FirefoxWebDriverCreateServiceImpl implements IWebDriverCreateService {
private static final String GECKO_PATH = "webdriver.gecko.driver";
+ private String uid;
@Override
public IWebDriverService createWebDriver(SetupConfig setupConfig) {
+ // 生产唯一uid
+ uid = IdUtil.fastSimpleUUID();
+
FirefoxOptions surrogate = getDefaultOption(setupConfig);
// 启动
- FirefoxWebDriverServiceImpl webDriver = new FirefoxWebDriverServiceImpl(surrogate, setupConfig);
+ IWebDriverService webDriver = new FirefoxWebDriverServiceImpl(surrogate, setupConfig, uid);
// 代理认证
- webDriver.installExtension(new File(setupConfig.getProxyAuthExt()).toPath());
+ webDriver.installExt(new File(setupConfig.getProxyAuthExt()).toPath());
log.info("create firefox[{}]", webDriver.getFlag());
return webDriver;
@@ -74,7 +79,7 @@ public class FirefoxWebDriverCreateServiceImpl implements IWebDriverCreateServic
// 自动下载文件类型
surrogate.addPreference("browser.download.folderList", 2);
- surrogate.addPreference("browser.download.dir", setupConfig.getDownDir());
+ surrogate.addPreference("browser.download.dir", setupConfig.getDownDir(uid));
surrogate.addPreference("browser.download.useDownloadDir", true);
surrogate.addPreference("browser.download.manager.showWhenStarting", false);
surrogate.addPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream, application/x-001, text/h323, drawing/907, audio/x-mei-aac, audio/aiff, text/asa, text/asp, audio/basic, application/vnd.adobe.workflow, application/x-bmp, application/x-c4t, application/x-cals, application/x-netcdf, application/x-cel, application/x-g4, application/x-cit, application/x-cmx, application/pkix-crl, application/x-csi, application/x-cut, application/x-dbm, application/x-x509-ca-cert, application/x-dib, application/msword, application/x-drw, Model/vnd.dwf, application/x-dwg, application/x-dxf, application/x-emf, application/x-ps, application/x-ebx, image/fax, application/fractals, application/x-frm, application/x-gbr, image/gif, application/x-gp4, application/x-hmr, application/x-hpl, application/x-hrf, text/x-component, image/x-icon, application/x-iff, application/x-igs, application/x-img, application/x-internet-signup, java/*, image/jpeg, application/x-jpg, application/x-laplayer-reg, audio/x-liquid-secure, audio/x-la-lms, application/x-ltr, video/x-mpeg, video/mpeg4, application/x-troff-man, application/msaccess, application/x-shockwave-flash, message/rfc822, audio/mid, application/x-mil, audio/x-musicnet-download, application/x-javascript, audio/mp1, video/mpeg, application/vnd.ms-project, video/mpg, audio/rn-mpeg, image/pnetvue, application/x-out, application/x-pkcs12, application/pkcs7-mime, application/x-pkcs7-certreqresp, application/x-pc5, application/x-pcl, application/pdf, application/vnd.adobe.pdx, application/x-pgl, application/vnd.ms-pki.pko, application/x-plt, application/x-png, application/vnd.ms-powerpoint, application/x-ppt, application/pics-rules, application/x-prt, application/postscript, audio/vnd.rn-realaudio, application/x-ras, application/x-red, application/vnd.rn-realsystem-rjs, application/x-rlc, application/vnd.rn-realmedia, audio/x-pn-realaudio, application/vnd.rn-realmedia-secure, application/vnd.rn-realsystem-rmx, image/vnd.rn-realpix, application/vnd.rn-rsml, video/vnd.rn-realvideo, application/x-sat, application/x-sdw, application/x-slb, drawing/x-slk, application/smil, text/plain, application/futuresplash, application/streamingmedia, application/vnd.ms-pki.stl, application/x-sty, application/x-tg4, image/tiff, drawing/x-top, application/x-icq, text/x-vcard, application/vnd.visio, application/x-vpeg005, application/x-vsd, audio/wav, application/x-wb1, application/x-wb3, application/x-wk4, application/x-wks, audio/x-ms-wma, application/x-wmf, video/x-ms-wmv, application/x-ms-wmz, application/x-wpd, application/vnd.ms-wpl, application/x-wr1, application/x-wrk, application/x-ws, application/vnd.adobe.xdp, application/vnd.adobe.xfd, application/x-xls, application/x-xwd, application/vnd.symbian.install, application/x-x_t, application/vnd.android.package-archive, application/x-301, application/x-906, application/x-a11, application/x-anv, video/x-ms-asf, video/avi, application/x-bot, application/x-c90, application/vnd.ms-pki.seccat, application/x-cdr, application/x-cgm, application/x-cmp, application/x-cot, application/x-dbf, application/x-dbx, application/x-dcx, application/x-dgn, application/x-msdownload, application/x-dwf, application/x-dxb, application/vnd.adobe.edn, application/x-epi, application/vnd.fdf, application/x-, application/x-gl2, application/x-hgl, application/x-hpgl, application/mac-binhex40, application/hta, text/webviewhtml, application/x-icb, application/x-ico, application/x-iphone, video/x-ivf, application/x-jpe, audio/x-liquid-file, application/x-latex, application/x-lbm, audio/mpegurl, application/x-mac, application/x-mdb, application/x-mi, audio/x-musicnet-stream, video/x-sgi-movie, audio/mp2, audio/mp3, video/x-mpg, application/x-mmxp, application/x-nrf, text/x-ms-odc, application/pkcs10, application/x-pkcs7-certificates, application/pkcs7-signature, application/x-pci, application/x-pcx, application/x-pic, application/x-perl, audio/scpls, image/png, application/x-ppm, application/x-pr, application/x-prn, application/x-ptn, text/vnd.rn-realtext3d, application/rat-file, application/vnd.rn-recording, application/x-rgb, application/vnd.rn-realsystem-rjt, application/x-rle, application/vnd.adobe.rmf, application/vnd.rn-realsystem-rmj, application/vnd.rn-rn_music_package, application/vnd.rn-realmedia-vbr, application/vnd.rn-realplayer, audio/x-pn-realaudio-plugin, text/vnd.rn-realtext, application/x-rtf, application/x-sam, application/sdp, application/x-stuffit, application/x-sld, application/x-smk, application/vnd.ms-pki.certstore, application/x-tdf, application/x-tga, application/x-tif, application/x-bittorrent, text/iuls, application/x-vda, application/x-vst, audio/x-ms-wax, application/x-wb2, image/vnd.wap.wbmp, application/x-wk3, application/x-wkq, video/x-ms-wm, application/x-ms-wmd, text/vnd.wap.wml, video/x-ms-wmx, application/x-wp6, application/x-wpg, application/x-wq1, application/x-wri, text/scriptlet, video/x-ms-wvx, application/vnd.adobe.xfdf, application/vnd.ms-excel, application/x-xlw, application/x-x_b, application/vnd.iphone, application/x-silverlight-app, application/msexcel, application/msword, application/zip, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/x-zip-compressed");
diff --git a/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverGetServiceImpl.java b/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverGetServiceImpl.java
index b6888c4fcf9030f6467aa27c64028aecf6718277..8c472da2c7ed287281fd5f7b5fa0db0b7d1c05ab 100644
--- a/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverGetServiceImpl.java
+++ b/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverGetServiceImpl.java
@@ -12,6 +12,7 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
+import org.openqa.selenium.NoSuchWindowException;
import java.io.File;
@@ -46,31 +47,24 @@ public class FirefoxWebDriverGetServiceImpl implements IWebDriverGetService {
@Override
public void get() {
+ // 重置窗口
+ String finalCurrentWindow = webDriver.resetWindow();
+
+ // 删除所有下载文件
+ FileUtil.clean(downDir);
+
// 设置代理
proxySet();
// 清空当前标签页内容
webDriver.get(SpecialUrl.FIREFOX_BLANK);
- String currentWindow = webDriver.getWindowHandle();
-
- // 关闭除当前标签的所有标签
- webDriver.getWindowHandles().forEach(window -> {
- if (!window.equals(currentWindow)) {
- webDriver.switchTo().window(window);
- webDriver.close();
- }
- });
-
- // 删除所有下载文件
- FileUtil.clean(downDir);
// 执行js, 跳转页面
- webDriver.switchTo().window(currentWindow);
webDriver.executeScript("window.open(\"" + formatUrl(url) + "\")");
// 切换标签
webDriver.getWindowHandles().forEach(window -> {
- if (!window.equals(currentWindow)) {
+ if (!window.equals(finalCurrentWindow)) {
webDriver.switchTo().window(window);
}
});
@@ -84,11 +78,10 @@ public class FirefoxWebDriverGetServiceImpl implements IWebDriverGetService {
*/
private void dealResult() {
long startCheckTime = System.currentTimeMillis();
- boolean htmlFlag = false;
boolean downFlag = false;
- while (!htmlFlag && !downFlag && System.currentTimeMillis() - startCheckTime < timeout) {
+ while (System.currentTimeMillis() - startCheckTime < timeout) {
// 下载文件检查
- if (FileUtil.exist(downDir)) {
+ if (FileUtil.exist(downDir) && FileUtil.ls(downDir).length > 0) {
log.info("file downloading...");
// 检测到文件下载,则等待下载完成
while (FileUtil.ls(downDir).length > 1 && System.currentTimeMillis() - startCheckTime < timeout) {
@@ -101,6 +94,7 @@ public class FirefoxWebDriverGetServiceImpl implements IWebDriverGetService {
log.info("get down file: {}", downFile.getName());
}
downFlag = true;
+ break;
}
@@ -108,7 +102,7 @@ public class FirefoxWebDriverGetServiceImpl implements IWebDriverGetService {
if (!StrUtil.hasEmpty(waitXpath)) {
if (!webDriver.findElements(By.xpath(waitXpath)).isEmpty()) {
log.info("find element with xpath: {}", waitXpath);
- htmlFlag = true;
+ break;
}
} else {
// 如果没有设置wait xpath 则检查完是否有下载文件后就退出
diff --git a/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverServiceImpl.java b/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverServiceImpl.java
index 92be8da9f29e78d6df98eddcaa3e5b4a9f8baa1f..48249ab08400ad841e77e4129f1a91c16e6b14f5 100644
--- a/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverServiceImpl.java
+++ b/src/main/java/cn/heiliu/selenium/service/impl/FirefoxWebDriverServiceImpl.java
@@ -6,11 +6,16 @@ import cn.heiliu.selenium.domain.WebDriverStatus;
import cn.heiliu.selenium.exception.DownFileTimeOutException;
import cn.heiliu.selenium.service.IWebDriverGetService;
import cn.heiliu.selenium.service.IWebDriverService;
+import cn.hutool.system.OsInfo;
+import cn.hutool.system.SystemUtil;
import com.google.common.collect.ImmutableMap;
+import org.openqa.selenium.NoSuchWindowException;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.remote.Response;
import java.nio.file.Path;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
/**
@@ -30,19 +35,36 @@ public class FirefoxWebDriverServiceImpl extends FirefoxDriver implements IWebDr
private SetupConfig setupConfig;
/**
- * 浏览器标志
+ * 浏览器名称
*/
- private String flag;
+ private String name;
+
+ /**
+ * 浏览器id
+ */
+ private String uid;
+
+ /**
+ * 当前浏览器的下载目录
+ */
+ private String ownDownDir;
/**
* 状态记录
*/
private WebDriverStatus status;
- public FirefoxWebDriverServiceImpl(FirefoxOptions firefoxOptions, SetupConfig setupConfig) {
+ /**
+ * 当前系统信息
+ */
+ private OsInfo osInfo = SystemUtil.getOsInfo();
+
+ public FirefoxWebDriverServiceImpl(FirefoxOptions firefoxOptions, SetupConfig setupConfig, String uid) {
super(firefoxOptions);
this.setupConfig = setupConfig;
- this.flag = "firefox-" + num.getAndIncrement();
+ this.uid = uid;
+ this.name = "firefox-" + uid + "-" + num.getAndIncrement();
+ this.ownDownDir = setupConfig.getDownDir(uid);
num.compareAndSet(10000, 1);
status = new WebDriverStatus();
}
@@ -51,24 +73,23 @@ public class FirefoxWebDriverServiceImpl extends FirefoxDriver implements IWebDr
* 安装临时插件
* temporary 是否是临时插件
* @param path 插件位置,绝对路径
- * @return
*/
@Override
- public String installExtension(Path path) {
- return (String) execute(INSTALL_EXTENSION,
+ public void installExt(Path path) {
+ execute(INSTALL_EXTENSION,
ImmutableMap.of("path", path.toAbsolutePath().toString(),
"temporary", true)).getValue();
}
@Override
public String getFlag() {
- return flag;
+ return name;
}
@Override
public IWebDriverGetService fetch(String url, SeleniumProxy proxy, String waitXpath, long timeout) {
try {
- FirefoxWebDriverGetServiceImpl webGet = new FirefoxWebDriverGetServiceImpl(this, setupConfig.getDownDir(), url, timeout);
+ FirefoxWebDriverGetServiceImpl webGet = new FirefoxWebDriverGetServiceImpl(this, ownDownDir, url, timeout);
webGet.setWaitXpath(waitXpath);
if (proxy != null && !proxy.isEmpty()) {
webGet.setProxy(proxy);
@@ -109,14 +130,69 @@ public class FirefoxWebDriverServiceImpl extends FirefoxDriver implements IWebDr
}
}
+ /**
+ * 每次操作浏览器都检测下窗口是否正确
+ * @param driverCommand
+ * @param parameters
+ * @return
+ */
+ @Override
+ protected Response execute(String driverCommand, Map parameters) {
+ while (true) {
+ try {
+ return super.execute(driverCommand, parameters);
+ } catch (NoSuchWindowException e) {
+ String s = getWindowHandles().toArray()[0].toString();
+ switchTo().window(s);
+ System.out.println(s);
+ parameters = ImmutableMap.of("handle", s);
+ }
+ }
+ }
+
@Override
public WebDriverStatus getStatus() {
return status;
}
+
+ @Override
+ public String resetWindow() {
+ String currentWindow;
+ try {
+ currentWindow = getWindowHandle();
+ } catch (NoSuchWindowException e) {
+ currentWindow = getWindowHandles().toArray()[0].toString();
+ }
+
+ // 关闭除当前标签的所有标签
+ String finalCurrentWindow = currentWindow;
+ getWindowHandles().forEach(window -> {
+ if (!window.equals(finalCurrentWindow)) {
+ switchTo().window(window);
+ close();
+ }
+ });
+ switchTo().window(finalCurrentWindow);
+ return currentWindow;
+ }
+
@Override
public void quit() {
status.invalid();
- super.quit();
+ // 强制关闭
+ try {
+ long pid = (long) getCapabilities().getCapability("moz:processID");
+ if (osInfo.isWindows()) {
+ Runtime.getRuntime().exec("taskkill /pid " + pid + " -t -f");
+ } else if (osInfo.isLinux()) {
+ Runtime.getRuntime().exec("kill -9 " + pid);
+ }
+ super.quit();
+ } catch (Exception e) {
+ // 不输出
+ }
}
+
+
}
diff --git a/src/main/java/cn/heiliu/selenium/service/impl/SeleniumPoolServiceImpl.java b/src/main/java/cn/heiliu/selenium/service/impl/SeleniumPoolServiceImpl.java
index 788306d12c0ce48bb63143666c6bfa4b3c7e09bb..52939bb94d277a5f78fa247b93247303fe1f9132 100644
--- a/src/main/java/cn/heiliu/selenium/service/impl/SeleniumPoolServiceImpl.java
+++ b/src/main/java/cn/heiliu/selenium/service/impl/SeleniumPoolServiceImpl.java
@@ -6,14 +6,13 @@ import cn.heiliu.selenium.exception.NoWebDriverException;
import cn.heiliu.selenium.service.ISeleniumPoolService;
import cn.heiliu.selenium.service.IWebDriverCreateService;
import cn.heiliu.selenium.service.IWebDriverService;
+import cn.hutool.core.collection.ConcurrentHashSet;
import cn.hutool.core.thread.ThreadFactoryBuilder;
import cn.hutool.core.thread.ThreadUtil;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.TimeoutException;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
import java.util.Random;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
@@ -33,7 +32,7 @@ public class SeleniumPoolServiceImpl implements ISeleniumPoolService, Runnable {
private IWebDriverCreateService webDriverCreateService;
private SetupConfig setupConfig;
- private HashSet pool;
+ private ConcurrentHashSet pool;
/**
* 有效webdriver个数
@@ -44,30 +43,31 @@ public class SeleniumPoolServiceImpl implements ISeleniumPoolService, Runnable {
public SeleniumPoolServiceImpl(IWebDriverCreateService webDriverCreateService, SetupConfig setupConfig) {
this.webDriverCreateService = webDriverCreateService;
this.setupConfig = setupConfig;
- pool = new LinkedHashSet<>(setupConfig.getPoolSize());
+ pool = new ConcurrentHashSet<>(setupConfig.getPoolSize());
// 后台检测线程
ThreadPoolExecutor monitor = new ThreadPoolExecutor(1, 1, 0, TimeUnit.SECONDS, new SynchronousQueue<>(),
- ThreadFactoryBuilder.create().setNamePrefix("selenium-pool-monitor").build());
+ ThreadFactoryBuilder.create().setNamePrefix("selenium-pool-monitor-").build());
monitor.execute(this);
}
@Override
public synchronized IWebDriverService getWebDriver(long timeout) throws TimeoutException {
- if (validNum <= 0 && pool.size() < setupConfig.getPoolSize()) {
- pool.add(webDriverCreateService.createWebDriver(setupConfig));
- validNum ++;
- }
-
// 阻塞等待
long startTime = System.currentTimeMillis();
while (validNum <= 0) {
if (System.currentTimeMillis() - startTime >= timeout) {
throw new TimeoutException();
}
- try {
- this.wait(timeout);
- } catch (InterruptedException e) {
- throw new TimeoutException();
+ if (pool.size() < setupConfig.getPoolSize()) {
+ //新建浏览器
+ pool.add(webDriverCreateService.createWebDriver(setupConfig));
+ validNum ++;
+ } else {
+ try {
+ this.wait(timeout);
+ } catch (InterruptedException e) {
+ throw new TimeoutException();
+ }
}
}
@@ -89,12 +89,14 @@ public class SeleniumPoolServiceImpl implements ISeleniumPoolService, Runnable {
if (!status.isValid() || status.getFailedNum() > setupConfig.getMaxFailedNum()) {
log.info("{} invalid, remove", webDriver.getFlag());
status.invalid();
+ validNum --;
pool.remove(webDriver);
+ webDriver.quit();
} else {
status.release();
validNum ++;
- this.notifyAll();
}
+ this.notifyAll();
}
@Override
@@ -105,8 +107,10 @@ public class SeleniumPoolServiceImpl implements ISeleniumPoolService, Runnable {
WebDriverStatus status = webDriver.getStatus();
if (!status.isValid()) {
- log.warn("{} checked invalid, go to remove", webDriver.getFlag());
- release(webDriver);
+ synchronized (this) {
+ log.warn("{} checked invalid, go to remove", webDriver.getFlag());
+ release(webDriver);
+ }
}
if (status.getStartUseTime() - System.currentTimeMillis() > 300000) {
@@ -115,7 +119,12 @@ public class SeleniumPoolServiceImpl implements ISeleniumPoolService, Runnable {
// 运行一段时间后关闭, 防止浏览器内存问题, 30分钟上下5分钟,防止同时关闭/启动
if (System.currentTimeMillis() - status.getStartUpTime() > random.nextInt(300000) + 1800000) {
- webDriver.getStatus().invalid();
+ synchronized (this) {
+ if (!webDriver.getStatus().isUsed()) {
+ webDriver.getStatus().invalid();
+ release(webDriver);
+ }
+ }
}
}
diff --git a/target/classes/logback.xml b/target/classes/logback.xml
deleted file mode 100644
index 490e425dcd5c7bd0a76bcc5bd3816c982db27ca3..0000000000000000000000000000000000000000
--- a/target/classes/logback.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
- %d %p (%file:%line\) - [%thread] [%X{key}] %m%n
- UTF-8
-
-
-
-
- ${LOG_HOME}/server.log
-
- ${LOG_HOME}/server.%d.log
- 7
-
-
- {"logtime": "%d", "level": "%level","thread": "%thread","class_name": "%class","line_number": "%line","message": "%message"}%n
- UTF-8
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties
deleted file mode 100644
index d051b0f202df6d03429c81a5b47a498fd08c39dd..0000000000000000000000000000000000000000
--- a/target/maven-archiver/pom.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Generated by Maven
-#Wed Jun 16 01:00:05 CST 2021
-groupId=cn.heiliu.selenium
-artifactId=selenium-client
-version=1.0-SNAPSHOT
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
deleted file mode 100644
index 8e1c30ed5364b9bb8532ce7ae7455e044895076c..0000000000000000000000000000000000000000
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ /dev/null
@@ -1,18 +0,0 @@
-cn\heiliu\selenium\exception\DownFileTimeOutException.class
-cn\heiliu\selenium\service\impl\SeleniumPoolServiceImpl.class
-cn\heiliu\selenium\service\ISeleniumPoolService.class
-cn\heiliu\selenium\domain\WebDriverStatus.class
-cn\heiliu\selenium\exception\UnsupportedMethodException.class
-cn\heiliu\selenium\domain\SeleniumProxy.class
-cn\heiliu\selenium\service\impl\FirefoxWebDriverCreateServiceImpl.class
-cn\heiliu\selenium\service\IWebDriverCreateService.class
-cn\heiliu\selenium\service\impl\FirefoxWebDriverServiceImpl.class
-cn\heiliu\selenium\domain\SpecialUrl.class
-cn\heiliu\selenium\config\SetupConfig$SetupConfigBuilder.class
-cn\heiliu\selenium\exception\NoWebDriverException.class
-cn\heiliu\selenium\config\SetupConfig.class
-cn\heiliu\selenium\service\impl\FirefoxWebDriverGetServiceImpl.class
-cn\heiliu\selenium\service\IWebDriverGetService.class
-cn\heiliu\selenium\service\IWebDriverService.class
-cn\heiliu\selenium\SeleniumManager.class
-cn\heiliu\selenium\domain\WebDriverGetResult.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
deleted file mode 100644
index 514a4485d59876be4b758fe5765d9fd2328b5f72..0000000000000000000000000000000000000000
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ /dev/null
@@ -1,17 +0,0 @@
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\exception\NoWebDriverException.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\config\SetupConfig.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\SeleniumManager.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\domain\SeleniumProxy.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\service\impl\FirefoxWebDriverServiceImpl.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\exception\DownFileTimeOutException.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\domain\WebDriverGetResult.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\service\IWebDriverService.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\domain\SpecialUrl.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\service\IWebDriverGetService.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\service\impl\FirefoxWebDriverGetServiceImpl.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\service\impl\SeleniumPoolServiceImpl.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\exception\UnsupportedMethodException.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\service\ISeleniumPoolService.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\domain\WebDriverStatus.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\service\impl\FirefoxWebDriverCreateServiceImpl.java
-D:\work\SeleniumClient\src\main\java\cn\heiliu\selenium\service\IWebDriverCreateService.java
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
deleted file mode 100644
index d1fde3c151456b454e6b9e2a53bc6a2b4e016f05..0000000000000000000000000000000000000000
--- a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
+++ /dev/null
@@ -1,3 +0,0 @@
-cn\heiliu\selenium\GetSingleWebDriver.class
-cn\heiliu\selenium\GetWebDriverFromPool$1.class
-cn\heiliu\selenium\GetWebDriverFromPool.class
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
deleted file mode 100644
index 1363f9a75d67a38ede3fff931a325d30139c6be3..0000000000000000000000000000000000000000
--- a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
+++ /dev/null
@@ -1,2 +0,0 @@
-D:\work\SeleniumClient\src\test\java\cn\heiliu\selenium\GetWebDriverFromPool.java
-D:\work\SeleniumClient\src\test\java\cn\heiliu\selenium\GetSingleWebDriver.java