这是我从Selenium WebElement获得价值的测试代码。
import java.util.List;
import org.apache.commons.lang3.ObjectUtils.Null;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Scan extends WebDriverException {
private long start = 0;
private WebDriver driver = null;
public static void main(String[] args) {
Scan scan = new Scan();
scan.driver = new FirefoxDriver();
scan.driver.get("https://en.wikipedia.org/");
scan.scanAllElements();
scan.driver.quit();
}
public void scanAllElements() {
// get all elements
List<WebElement> elms = driver.findElements(By.xpath("//*"));
System.out.println("elms size:" + elms.size());
// start timer
this.start = System.currentTimeMillis();
// scan all elements and get some value.
for (WebElement elm : elms) {
elm.getTagName();
elm.getAttribute("class");
elm.getAttribute("id");
elm.getAttribute("href");
elm.getText();
elm.getSize();
elm.getLocation();
}
// check the time
stopTimer(elms.size());
}
public void stopTimer(int elmsSize) {
long end = System.currentTimeMillis();
long ms = end - this.start;
long sec = ms / 1000;
long min = sec / 60;
System.out.println("--- Speed Test ---");
System.out.println(ms + " ms");
System.out.println(sec + " s");
System.out.println(min + " min " + (sec % 60) + " s ");
System.out.println("1 loop average time:" + (ms / elmsSize) + " ms");
}
}
结果就是这样,这需要很长时间。我想快点。
elms size:1031
--- Speed Test ---
123468 ms
123 s
2 min 3 s
each loop average time:119 ms
如果价值不是我想要的。跳过以(继续)获得另一个获取值。
此示例获取所有元素(// *)。因此,当我得到它时,我过滤了元素,这是个好方法。但是我仍然有几百个要素,我需要最小化处理时间。
我测试了Runnable Callable Stream。
Runnable和Callable解决了速度问题。处理时间变为40%左右。但是许多元素变成了空!
流仅最小化10%的时间,而且某些元素为null。
如果您有什么想法可以更快地获得它,请告诉我!
您可以使用Javascript,以下代码将几乎立即返回包含标签名称,id,href,类键的Map的ArrayList:
ArrayList<Maps> list = (ArrayList) ((JavascriptExecutor) driver).executeScript("return [...document.querySelectorAll(\"*\")].map(e=>{return {tagName:(e.tagName==undefined?null:e.tagName),class:(e.className==undefined?null:e.className),id:(e.id==undefined?null:e.id),href:(e.href==undefined?null:e.href)}})");
您只需要添加js代码即可获取位置和大小。对于文本,您可以使用textContent。
在执行脚本之前,请确保已加载页面。
问题内容: 我想优化此代码: 事情是,我不知道如何读取bufferedReader的内容并将其复制到String中,比我上面的速度更快。我需要花费尽可能少的时间。谢谢 问题答案: 在循环中使用字符串连接是 在 经典的性能杀手(因为字符串是不可变的,整个越来越大的字符串被复制为每个连接)。改为这样做:
问题内容: 我如何获得本地IpAddress? 当我使用该功能时,我将无法再继续使用。我不能使用该功能。 是否有其他方法可以执行此操作,或者我是否以错误的方式进行操作? 问题答案: 在讨论中发现,OP需要Mac上的接口地址,而不是我最初想的那样在iOS设备上。问题中引用的代码将检查接口名称“en0”,它是iPhone上的WiFi接口。在Mac上,改为检查任何“正在运行”的界面更有意义。因此,我重写
问题内容: 问题 从地图中获取数据 资料格式 注意 如何从上述结果中获得以下值 1.Event_dtmReleaseDate 2.strID 3.Trans_strGuestList 我试过的 res.Map(“ Event_dtmReleaseDate”); 错误:res.Map未定义(类型map [string] interface {}没有字段或方法Map) res.Event_dtmRel
问题内容: 在Android中,是否有任何方法可以获取静态方式的应用程序上下文?例如,从后台线程检索它。 谢谢 问题答案: 最简单(也是正确的)方法是: 定义一个新类 然后,在清单中需要将此类添加到“应用程序”选项卡的“名称”字段中。或编辑xml并放入 然后可以从任何地方打电话 希望能帮助到你
问题内容: 我目前正在使用PhotoImage和tkinter逐像素绘制Mandelbrot集。我基本上是直接使用没有修改的算法。有没有使计算更快的方法?也许快速填充大面积的颜色,或者预先计算常数? 部分代码: 问题答案: 一次设置一个像素可能是减速的主要来源。而不是为每个像素调用put,而是计算整个像素行或整个像素矩阵,然后在循环结束时调用一次。 您可以在其他位置找到示例:https : //w
我目前正在用PhotoImage和tkinter逐像素绘制Mandelbrot集。我基本上是直接使用算法,没有任何修改。有没有方法可以加快计算速度?也许快速填充大面积的颜色,或者预先计算常数? 守则的一部分: