【问题标题】:HtmlUnitDriver click and wait for reloading elementHtmlUnitDriver 单击并等待重新加载元素
【发布时间】:2018-04-14 03:19:44
【问题描述】:

我的问题是如何执行单击元素以从服务器响应中获取数据? 算法:
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 元素完成重新加载。 使用调试模式我注意到奇怪的事情。在这一行:

phone = webElement.getText();

webElement 的状态:readyState_ = "loading"

【问题讨论】:

  • AFAIU : 你想导航到olx.ua/obyavlenie/… 网站并想点击 div。一旦你点击那个 div 就会弹出两个电话号码,你想找回这些号码吗?
  • 是的,你是对的。我正在研究解析器。我正在获取除电话号码以外的所有数据。
  • 过段时间我会分享代码!

标签: java html selenium htmlunit-driver


【解决方案1】:

采取的步骤:

  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());
            }

    }

    }

【讨论】:

  • 它对我有用,谢谢。有没有办法用 HtmlUnitDriver 做类似的事情?
  • 欢迎!如果它已经解决了您的问题,您可以通过单击 downvote 按钮下方的复选标志来接受答案!谢谢!
  • 我会与 htmlUnitDriver 核对并让您知道状态。
  • 再给我一点时间!
  • 当然,伙计,我在这里有点新,所以我对编辑 cmets 感到困惑,非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
相关资源
最近更新 更多