如何使用 Selenium 和 Python 提取项目利息的价值

How to extract the value of the item Interest over term using Selenium and Python

我需要在 selenium 中访问这个元素我认为它是 angular 所以 chropath 插件没有显示任何数据到达这里。并提取价值 14,213.47 它在 iframe

 <div class="elem">
                            <span class="text">Interest over term</span>
                            <span class="value">,213.47</span>
                        </div>

如何编写 xpath 或 cssselector 使其到达此元素

<div class="calculator-output">
    <div class="head">
        <div class="img-Mortgage"></div>
        <!---->
        <!----><span class="ng-tns-c0-0 ng-star-inserted">Mortgage Payment:</span>
        <!---->
    </div>

    <!----><div class="ng-tns-c0-0 ng-star-inserted">
        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">

                <div class="output">

                    
                    <!---->
                    
                    
                    <!---->
                    
                    
                    <!---->
                    
                    
                    <!----><div class="ng-tns-c0-0 ng-star-inserted">
                        <!----><div class="elem ng-tns-c0-0 ng-star-inserted">
                            <span class="text">Mortgage Payment</span>
                            <span class="value">,867.73</span>
                        </div>
                        <!---->
                        
                        <div class="elem">
                            <span class="text">Interest over term</span>
                            <span class="value">,213.47</span>
                        </div>
                        <div class="elem">
                            <span class="text">Balance owing at term</span>
                            <span class="value">1,800.71</span>
                        </div>
                        <div class="elem">
                            <span class="text">
                                Total interest
                                <span class="info-tooltip" data-balloon="Total interest cost over amortization."></span>
                            </span>
                            <span class="value">0,318.94</span>
                        </div>

                        <!---->
                    </div>
                    
                </div>
                <div class="actions">
                    <!---->
                    <!---->
                </div>
            </div>
        </div>

        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
                <div class="options">
                    <div class="elem">
                        <div class="imgPlan"></div>
                        <span class="ng-tns-c0-0">Full Plan</span>
                    </div>
                    <!----><div class="elem ng-tns-c0-0 ng-star-inserted">
                        <div class="imgPrint"></div>
                        <span class="ng-tns-c0-0">Print</span>
                    </div>
                    <div class="elem">
                        <div class="imgSave"></div>
                        <span class="ng-tns-c0-0">Save</span>
                    </div>
                    <!----><div class="elem ng-tns-c0-0 ng-star-inserted">
                        <div class="imgCompare"></div>
                        <span class="ng-tns-c0-0">Compare</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

到 select <div>,使用这个 XPath-1.0 表达式:

//div[@class="elem" and span[@class="text"]="Interest over term"]

并获取值 14,213.47,使用这个:

substring-after(//div[@class="elem" and span[@class="text"]="Interest over term"]/span[2],"$")

试试看

(//div[@class="elem"]/span["interest over term"])[1]/following-sibling::span[@class="value"]

(//div[@class="elem"]/span["interest over term"])[1]/following-sibling::span[@class="value"]/text()

看看它是否有效。

文本 期末利息 和关联值 $14,213.47<iframe> 内,因此您必须:

  • 诱导 WebDriverWait 所需的 帧可用并切换到它

  • 诱导 所需的 元素可点击

  • 您可以使用以下 based :

    driver.get("https://www.coastcapitalsavings.com/calculators/mortgage-calculator")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='cookies-disclaimer--button']"))).click()
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@src='https://calculator.coastcapitalsavings.com/ITSCredit.External/CCS/ITSCredit.CCS.UI.External/calculator/MT?']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Payment']"))).click()
    driver.execute_script("arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[text()='Interest over term']"))))
    # using xpath and text attribute
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[text()='Interest over term']//following-sibling::span"))).text)
    # using cssSelector and get_attribute()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[text()='Interest over term']//following-sibling::span"))).get_attribute("innerHTML"))
    
  • 控制台输出:

    ,819.69
    ,819.69
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

参考

您可以在以下位置找到一些相关讨论:

  • Switch to an iframe through Selenium and python