gpt4 book ai didi

java - HtmlUnitDriver 单击并等待重新加载元素

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:42 25 4
gpt4 key购买 nike

我的问题是如何执行单击元素以从服务器响应获取数据?算法:
1) 单击 div 元素

<div class="contact-button link-phone {'path':'phone', 'id':'z8rpg', 'id_raw': '519183738'} atClickTracking contact-a" data-rel="phone"> 
<i data-icon="phone"></i>
<strong class="xx-large"> TEXT1 </strong>
</div>

2) 向服务器发送请求
3) 服务器发送带有修改文本的响应。所以我需要获取修改后的文本(代码中的TEXT1)。我是这样做的:

HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME);
driver.get("https://www.olx.ua/obyavlenie/audi-a4-1998-IDzaH8c.html#c890172227;promoted");
System.out.println("Title: " + driver.getTitle());
WebElement webElement = driver.findElement
(By.xpath("//*[@id=\"contact_methods\"]/li[2]/div"));
webElement.click();
Thread.sleep(3000);
webElement = driver.findElement
(By.xpath("//*[@id=\"contact_methods\"]/li[2]/div"));
phone = webElement.getText();

更新:

据我了解,从服务器 div 元素获取响应后正在重新加载,而不是整个页面。我需要等到 div 元素完成重新加载。使用 Debug模式我注意到奇怪的事情。在这一行中:

phone = webElement.getText();

webElement 的状态:readyState_ = "loading"

最佳答案

采取的步骤:

  1. 导航至 https://www.olx.ua/obyavlenie/audi-a4-1998-IDzaH8c.html#c890172227;promoted

  2. 单击屏幕右侧的Показать(跨度)。

  3. 点击后会立即看到两个数字。
  4. 检索这两个数字并将其打印在控制台上。

代码:Java + Selenium

public class Lesnov {

static WebDriver driver;
static WebDriverWait wait;

public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "D:\\Automation\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
wait = new WebDriverWait(driver, 40);
driver.get("https://www.olx.ua/obyavlenie/audi-a4-1998-IDzaH8c.html#c890172227;promoted");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[class^='contact-button']")));
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("span[class='spoiler']")));
driver.findElement(By.cssSelector("span[class='spoiler']")).click();
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector("strong[class='xx-large']>span[class='block']")));
List<WebElement> numbers = driver.findElements(By.cssSelector("strong[class='xx-large']>span[class='block']"));
for(WebElement num : numbers){
System.out.println(num.getText());
}

}

}

尝试此代码并让我知道状态。
注意:我正在使用 chromeDriver 实例来启动 Chrome 浏览器。
如果您对此有疑问,请告诉我。

更新

您可以将此代码与 htmlunitDriver 一起使用;

public class Lesnov {

static WebDriver driver;
static WebDriverWait wait;

public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "D:\\Automation\\chromedriver.exe");
WebDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME ,true);
driver.manage().window().maximize();
wait = new WebDriverWait(driver, 40);
driver.get("https://www.olx.ua/obyavlenie/audi-a4-1998-IDzaH8c.html#c890172227;promoted");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[class^='contact-button']")));
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("span[class='spoiler']")));
driver.findElement(By.cssSelector("span[class='spoiler']")).click();
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector("strong[class='xx-large']>span[class='block']")));
List<WebElement> numbers = driver.findElements(By.cssSelector("strong[class='xx-large']>span[class='block']"));
for(WebElement num : numbers){
System.out.println(num.getText());
}

}

}

关于java - HtmlUnitDriver 单击并等待重新加载元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49827555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com