विशिष्ट पाठ कैसे प्राप्त करें जो div वर्ग से संबंधित है
<div class="col_5">
<br>
<i class="phone">
:: Before
</i>
0212 / 897645
<br>
<i class="print">
:: Before
</i>
0212 / 111111
<br>
<br>
</div>
सबसे पहले मैं एक वेबसाइट से गेट्टिन डेटा ले रहा हूं और इन डेटा को पांडा के उपयोग से एक्सेल करने के लिए आवेदन कर रहा हूं।
जैसा कि ऊपर कहा गया है मेरे पास एक html कोड है। मैं फोन नंबर लेना चाहता हूं जो बाद में आता है <i class='phone'>
और दूसरे को पास करता है। हालाँकि फोन नंबर का संबंध I वर्ग से नहीं है इसलिए मैं केवल 'xpath' प्राप्त करके नंबर प्राप्त कर सकता हूं <div class='col_5'>
लेकिन यह मेरे लिए सुरक्षित नहीं है क्योंकि कुछ 'divs' में फोन नंबर नहीं है और केवल प्रिंट नंबर है और यह हो सकता है मेरे लिए घातक। उदाहरण के लिए मैं <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'>
दूसरे कोड में xpath मिलता है तो मुझे केवल प्रिंट नंबर मिलता है और ऐसा होने पर मैं अपना डेटा प्रिंट नंबर फोन नंबर के रूप में जोड़ता हूं। और यह गलत डेटा पैदा कर रहा है। और जब मैं वही सटीक काम करता हूं जैसा कि आउटपुट के ऊपर बताया गया है
['0201 / 623424', '', 'E-Mail']
इसलिए जब मैं पहला आइटम लेने की कोशिश करता हूं, तो वह प्रिंट नंबर लेता है। यदि फोन नंबर है, तो मैं इसे लेना चाहता हूं, यदि नहीं, तो इसे ले जाएं और आगे बढ़ें। क्या यह संभव है?
जवाब
पाठ को प्रिंट 0212 / 897645
करने के लिए आपको WebDriverWait के लिए प्रेरित करना होगा visibility_of_element_located()
और आप निम्न लोकेटर रणनीतियों में से किसी एक का उपयोग कर सकते हैं :
का उपयोग कर
CSS_SELECTOR
, चाइल्डकोड और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
संदर्भ
आप प्रासंगिक विस्तृत चर्चा के एक जोड़े को पा सकते हैं:
- सेलेनियम और पायथन का उपयोग करके एक पाठ नोड से आंशिक पाठ कैसे प्राप्त करें
- सेलेनियम और पायथन का उपयोग करके व्हॉट्सएप से अलग किए गए टेक्स्टनोड से टेक्स्ट कैसे प्राप्त करें