java—如何获取selenium文本,但当产品的折扣元素发生变化时

yacmzcpb  于 2021-07-05  发布在  Java
关注(0)|答案(5)|浏览(310)

(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>
efzxgjgh

efzxgjgh1#

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!
}
bvuwiixz

bvuwiixz2#

要打印文本,可以使用以下任一定位器策略:
748
使用 css_selector 以及 get_attribute() :

print(driver.find_element_by_css_selector("div.pb-basket-item-price").get_attribute("innerHTML"))

使用 xpath 和文本属性:

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

419
使用 css_selector 和文本内容:

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

使用 xpath 和文本内容:

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

wecizke33#

你首先需要得到元素,比如:

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

然后您可以遍历webelement列表,并检查元素应该具有的特定文本。

2fjabf4q

2fjabf4q4#

所以背后的想法是,
首先需要找出元素并将它们转换为列表。 $x("//div[contains(@class, 'pb-basket-item-price')]") 一旦列表就绪,就需要为列表中的每个元素找到最后一个子元素。 $x("//div[contains(@class, 'pb-basket-item-price')]")[1].lastChild ->
499 TL $x("//div[contains(@class, 'pb-basket-item-price')]")[2].lastChild -> 748 TL 现在你已经准备好了,试着把这个逻辑放到代码中。

pbwdgjma

pbwdgjma5#

抓起产品标签,然后向内检查是否有跨距。

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

相关问题