我正在嘗試從 html 標簽和類名相同的 html 代碼中獲取子元素(卡號)。下面是html代碼片段
<li class="paymentMethods-stored">
<li class="paymentMethod">
<div class="stored-card-details">
<span class="body-2">Name: </span>
<span class="body-2 body-2-md"> VISA</span>
<p>
<span class="body-2">Number:</span>
<span class="body-2 body-2-md"> ************4305</span>
</p>
<p>
<span class="body-2">Expiry:</span>
<span class="body-2 body-2-md"> 03/2030</span>
</p>
</div>
</li>
<li class="paymentMethod">
<div class="stored-card-details">
<span class="body-2">Name: </span>
<span class="body-2 body-2-md"> VISA</span>
<p>
<span class="body-2">Number:</span>
<span class="body-2 body-2-md"> ************4111</span>
</p>
<p>
<span class="body-2">Expiry:</span>
<span class="body-2 body-2-md"> 04/2031</span>
</p>
</div>
</li>
</li>
以下是我嘗試過的識別符號。但兩者都回傳了第一個卡號“************4305”。
@FindBy(xpath = "//li[@class='paymentMethods-stored']//li[@class='paymentMethod']")
private WebElement firstSavedCard;
@FindBy(xpath = "(//li[@class='paymentMethods-stored']//li[@class='paymentMethod'])[2]")
private WebElement secondSavedCard;
String firstCard=firstSavedCard.findElement(By.xpath("//*[@class='stored-card-details']/p[1]/span[2]")).getText();
String secondCard=secondSavedCard.findElement(By.xpath("//*[@class='stored-card-details']/p[1]/span[2]")).getText();
嘗試了其他選項:這也回傳了第一個卡號“************4305”。
secondSavedCard.findElement(By.xpath("/p[1]/span[2]")).getText();
secondSavedCard.findElement(By.xpath(".//*[@class='stored-card-details']/p[1]/span[2]")).getText()
uj5u.com熱心網友回復:
嘗試以下xpath選擇所有編號的標簽 -
//li[@class="paymentMethod"]/descendant::span[4]
對于選擇第一個元素使用 -
(//li[@class="paymentMethod"]/descendant::span[4])[1]
用于選擇第二個元素使用 -
(//li[@class="paymentMethod"]/descendant::span[4])[2]
等等。
此外,您可以使用findelements代替findelementwhich 將找到所有元素。收集串列中的所有元素,然后迭代并提取文本。
uj5u.com熱心網友回復:
在 XPATH 開頭使用"//"將始終查看 DOM 的根,并忽略您"findElement"在父元素的背景關系中呼叫的事實。
使用".//"應該可以解決此問題,因此您可能需要仔細檢查。
或者,您可以使用"self::*"更詳細和更明顯的方式
uj5u.com熱心網友回復:
正如@Robbie Wareham他在回答中提到的那樣//*,將從根元素開始搜索,但是作為您的代碼塊,您需要從已經找到的相對元素中進行搜索。
要查找卡號作為替代,您可以使用以下定位器策略:
@FindBy(xpath = "//li[@class='paymentMethods-stored']//following::li[1]//p//span[contains(., 'Number')]//following-sibling::span[1]")
private WebElement firstSavedCardNumber;
@FindBy(xpath = "(//li[@class='paymentMethods-stored']//following::li[2]//p//span[contains(., 'Number')]//following-sibling::span[1]")
private WebElement secondSavedCardNumber;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/471182.html
上一篇:如何使用Python/Selenium獲取表格及其元素
下一篇:使用不更改url的選項卡抓取網頁
