我想获取一个DOM元素,该元素在页面加载时不存在,但随后使用脚本添加。确切的情况如下:
(所有这些步骤都由驱动程序本身使用click()
或机器人通过按键和鼠标操作来处理)
选择了随机RSI后,无需添加页面刷新即可添加新的DOM元素。我正在寻找具有类名<span>
的{{1}}元素,这些元素是在添加“随机RSI”后生成的。
致电"pane-legend-item-value-wrap"
给我0个结果。我认为那是由于驱动程序页面源仍然是第一次立即加载页面后的源。有没有一种方法可以刷新页面源或DOM树而无需重新加载整个页面?
我尝试了隐式和显式等待,但仍未成功,并出现以下错误:
线程“主”中的异常org.openqa.selenium.TimeoutException:预期条件失败:等待By.className所定位的任何元素的存在:方格-传奇-物品-价值-换行(尝试15秒)间隔为500毫秒)
这是相关代码:
driver.findElements(By.className("pane-legend-item-value-wrap"))
public class Main {
public static void main(String args[]) {
try {
Selenium selenium = new Selenium();
selenium.startChrome();
for (int i = 0; i < 30000; i++) {
try {
selenium.getChromeDriver().getTitle();
} catch (WebDriverException e) {
i = 30000;
continue;
}
System.out.println("Current Coin Value: " + selenium.getValueOfCoin() + "$ - " + "StRSI Blue: "
+ selenium.getBlueStRSI() + " - StRSI Red: " + selenium.getRedStRSI());
Thread.sleep(200);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
找不到元素的原因是因为它们位于“ iframe”中。您应该先切换到iframe上下文,然后单击。这是一个工作示例:
ChromeOptions chromeOptions = new ChromeOptions();
ChromeDriver driver = new ChromeDriver(chromeOptions);
driver.get("https://www.binance.com/de/trade/pro/XRP_BTC");
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@class='sc-1t2bpae-5 bEXbyP' and contains(text(),'TradingView')]"))).click();
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@class='sc-1t2bpae-5 bEXbyP' and contains(text(),'Technical Ind')]"))).click();
WebElement frameElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//iframe[contains(@id, \"tradingview\")]")));
driver.switchTo().frame(frameElement);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[contains(text(),'Stochastic RSI')]"))).click();
WebElement element = driver.findElement(By.className("pane-legend-item-value-wrap"));
driver.quit();
答案 1 :(得分:-1)
是否可以刷新该页面源或DOM树?
再次致电get()
,或使用navigate().refresh()