簡體   English   中英

如何獲取 Selenium 文本但當產品有折扣元素更改時

[英]How to get Selenium Text But When Product Has Discount Element Changes

(JAVA) 我從網站上隨機選擇產品。 有時有折扣有時沒有。

例如:

我怎樣才能得到 748(沒有折扣的產品)

或者我怎樣才能得到 419(有折扣的產品)

當產品有折扣時元素為:

<div class="pb-basket-item-price">748 TL</div>

當其他產品沒有折扣時 元素是:

<div class="pb-basket-item-price">
<span>499 TL</span>
"419 TL"</div>
List<WebElement> elements = driver.findElements(By.xpath("//div[contains(@class, 'pb-basket-item-price')]"));
for (WebElement element : elements) {
    String str = element.getText();
    System.out.println("original string: " + str);

    if (str.contains("\"")) {
        str = str.split("\"")[1];
    }
    System.out.println("this is what you need: " + str);
}

,下面是運行日志:

original string: 748 TL
this is what you need: 748 TL

original string: 499 TL "419 TL"
this is what you want: 419 TL

編輯

根據題主意見修改。

假設:HTML 看起來像:

<div class="pb-basket-item-price">748 TL</div>

<div class="pb-basket-item-price">
<span>499 TL</span>
"419 TL"</div>

<div class="pb-basket-item-price">
<span>3.374,34 TL</span>
2.339 TL</div>

代碼:

List<WebElement> elements = driver.findElements(By.xpath("//div[contains(@class, 'pb-basket-item-price')]"));
for (WebElement element : elements) {
    String str = element.getText();

    int cntTL = (str.length() - str.replace("TL", "").length()) / 2;
    if (2 == cntTL) {
        str = str.split("TL")[1].replace("\"", "") + " TL";
    }

    System.out.println("this is what you need: " + str);
    // str is what you want!
}

您首先需要獲取元素,例如:

List<WebElement> elements = driver.findElements(By.xpath("//div[contains(@class, 'pb-basket-item-price')]"));

然后,您可以遍歷 Web 元素列表並檢查元素應具有的特定文本。

抓住產品標簽,然后向內檢查它是否有跨度。

WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement outertag = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(@class, 'pb-basket-item-price')")));
List<WebElement> innertag = outertag.findElements(By.xpath("//span"));
if(innertag.size()>0){
System.out.println(innertag.get(0).getText());
}
else{
System.out.println(outertag.getText());
}

要打印文本,您可以使用以下任一定位器策略

  • 748

    • 使用css_selectorget_attribute()

       print(driver.find_element_by_css_selector("div.pb-basket-item-price").get_attribute("innerHTML"))
    • 使用xpathtext屬性:

       print(driver.find_element_by_xpath("//div[@class='pb-basket-item-price']").text)
  • 419

    • 使用css_selectortextContent

       print(driver.execute_script('return arguments[0].lastChild.textContent;', driver.find_element_by_css_selector("div.pb-basket-item-price")).strip())
    • 使用xpathtextContent

       print(driver.execute_script('return arguments[0].lastChild.textContent;', driver.find_element_by_xpath("//div[@class='pb-basket-item-price']).strip())

所以背后的想法是,

您首先需要找出元素並將它們轉換為列表。

$x("//div[contains(@class, 'pb-basket-item-price')]")

一旦你有了列表,你需要為列表中的每個元素找到 lastChild 。

$x("//div[contains(@class, 'pb-basket-item-price')]")[1].lastChild -> 499 TL $x("//div[contains(@class, 'pb-basket-item-price')]")[2].lastChild -> 748 TL

現在您已准備就緒,請嘗試將此邏輯放入代碼中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM