divクラスに属する特定のテキストを取得する方法

Jan 29 2021

<div class="col_5"> 
       <br>
            <i class="phone">
                  :: Before
                  </i>
                  0212 / 897645
            <br>
                  
                  <i class="print">
                  :: Before
                  </i>
                  0212 / 111111
            <br>
       <br>
</div>

まず、私はWebサイトからデータを取得し、パンダを使用してこれらのデータをExcelに適用しています。

上記のHTMLコードがあります。後の電話番号を取り<i class='phone'>、もう一方の電話番号を渡したい。ただし、電話番号はIクラスに属していないため、の「xpath」を取得することによってのみ番号を取得でき<div class='col_5'>ましたが、一部の「div」には電話番号がなく、印刷番号しかないため、これは安全ではありません。私にとって致命的です。たとえば、私はその<div class='col_5'>ようなxpathを見つけようとします

num = browser.find_element_by_xpath('div[1]/div/div[103]/div[2]')
num.text.split('\n')

そして出力は

['02243 / 80343', '02243 / 83261']

<div class="col_5"> 
       <br>
            <i class="phone">
                  ::Before
                  </i>
                  
               <br>
                  <i class="print">
                  ::Before
                  </i> 
                  0201 / 623424
               <br>
        <br>
        <a href="mailto:[email protected]"> <i class="envelope"> </i> E-Mail</a>
 </div>

上記では、電話番号は含まれていませんが、印刷番号のみが含まれているコードを共有しました。<div class='col_5'>2番目のコードでのxpathを取得すると、印刷番号のみが取得されます。これらが発生している間、データの印刷番号を電話番号として追加します。そして、これは誤ったデータを引き起こしています。そして、私が上記とまったく同じことをすると、出力は次のようになります。

['0201 / 623424', '', 'E-Mail']

したがって、最初のアイテムを取得しようとすると、印刷番号が取得されます。電話番号がある場合は、それを受け取りたいだけです。ない場合は、取って先に進みます。これは可能ですか?

回答

1 DebanjanB Jan 29 2021 at 04:42

テキストを印刷するには0212 / 897645、あなたが誘導しなければならないWebDriverWaitをするためにvisibility_of_element_located()、あなたは、次のいずれかを使用することができますロケータ戦略:

  • CSS_SELECTORchildNodesおよびstrip():を使用する

    print(driver.execute_script('return arguments[0].childNodes[5].textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.col_5")))).strip())
    
  • 使用してXPATHget_attribute()そしてsplitlines()

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[1]/div/div[103]/div[2]"))).get_attribute("innerHTML").splitlines()[4])
    
  • :次のインポートを追加する必要があります:

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

参考文献

関連する詳細なディスカッションがいくつかあります。

  • SeleniumとPythonを使用してテキストノードから部分的なテキストを取得する方法
  • SeleniumとPythonを使用して、空白で区切られたテキストノードからテキストを取得する方法