วิธีรับข้อความเฉพาะที่เป็นของคลาส 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>

ประการแรกฉันได้รับข้อมูลจากเว็บไซต์และนำข้อมูลเหล่านี้ไปใช้กับ excel โดยใช้แพนด้า

ฉันมีรหัส html ตามที่ระบุไว้ข้างต้น ฉันต้องการรับหมายเลขโทรศัพท์ที่ได้มาหลังจาก<i class='phone'>และส่งต่ออีกหมายเลขหนึ่ง อย่างไรก็ตามหมายเลขโทรศัพท์ไม่ได้เป็นของคลาส I ดังนั้นฉันจึงสามารถรับตัวเลขได้โดยการรับ 'xpath' ของ<div class='col_5'>แต่สิ่งนี้ไม่ปลอดภัยสำหรับฉันเพราะ 'div' บางตัวไม่มีหมายเลขโทรศัพท์และมีเพียงหมายเลขพิมพ์และอาจเป็นได้ อันตรายถึงชีวิตสำหรับฉัน ตัวอย่างเช่นฉันพยายามหา xpath ของ<div class='col_5'>แบบนั้น

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>

ด้านบนฉันแชร์รหัสซึ่งไม่มีหมายเลขโทรศัพท์ แต่มีหมายเลขพิมพ์เท่านั้น เมื่อฉันได้รับ xpath ของ<div class='col_5'>รหัสที่สองฉันจะได้รับหมายเลขพิมพ์เท่านั้นและในขณะที่สิ่งเหล่านี้เกิดขึ้นฉันเพิ่มหมายเลขพิมพ์ข้อมูลของฉันเป็นหมายเลขโทรศัพท์ และนี่เป็นสาเหตุของข้อมูลที่ไม่ถูกต้อง และเมื่อฉันทำสิ่งเดียวกันกับที่ระบุไว้ข้างต้นผลลัพธ์คือ

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

ดังนั้นเมื่อฉันลองใช้รายการแรกมันจะใช้หมายเลขพิมพ์ ถ้ามีเบอร์โทรศัพท์ฉันแค่อยากจะรับมันถ้าไม่มีก็รับไปเลย เป็นไปได้หรือไม่?

คำตอบ

1 DebanjanB Jan 29 2021 at 04:42

หากต้องการพิมพ์ข้อความที่0212 / 897645คุณจะต้องทำให้เกิดWebDriverWaitสำหรับvisibility_of_element_located()และคุณสามารถใช้อย่างใดอย่างหนึ่งดังต่อไปนี้กลยุทธ์ส :

  • การใช้CSS_SELECTOR, childNodesและ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())
    
  • การใช้XPATH, get_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
  • วิธีรับข้อความจาก textnodes แยกด้วยช่องว่างโดยใช้ Selenium และ Python