如何获取属于div类的特定文本



<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类,所以我只能通过获取<div class='col_5'>的"xpath"来获取数字,但这对我来说不安全,因为一些"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:info@someone.com"> <i class="envelope"> </i> E-Mail</a>
</div>

上面我分享了没有电话号码但只有打印号码的代码。当我在第二个代码中获得<div class='col_5'>的xpath时,我只获得打印号码,当这些发生时,我将数据打印号码添加为电话号码。这导致了不正确的数据。当我按照上面所说的做同样的事情时输出是

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

所以当我尝试取第一项时,它取打印编号。如果有电话号码,我只想拿着它,如果没有,拿着它继续前进。这可能吗?

要打印文本0212 / 897645,您必须为visibility_of_element_located()诱导WebDriverWait,您可以使用以下定位器策略之一:

  • 使用CSS_SELECTORchildNodesstrip():

    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从文本节点检索部分文本
  • 如何使用Selenium和Python从空白分隔的文本节点中获取文本

最新更新