如何获取属于 div class 的特定文本
How to get specific text that belongs to div class
<div class="col_5">
<br>
<i class="phone">
:: Before
</i>
0212 / 897645
<br>
<i class="print">
:: Before
</i>
0212 / 111111
<br>
<br>
</div>
首先,我从网站获取数据并使用 pandas 将这些数据应用到 excel。
我有一个如上所述的 html 代码。我想取 <i class='phone'>
之后的 phone 号码并传递另一个号码。然而 phone 号码不属于我 class 所以我只能通过获取 <div class='col_5'>
的 'xpath' 来获得号码但这对我来说不安全因为一些 'divs' 没有 phone 号码,只有打印号码,这对我来说可能是致命的。例如,我尝试像那样找到 <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>
以上
我分享了没有 phone 号码但只有打印号码的代码。当我在第二个代码中得到 <div class='col_5'>
的 xpath 时,我只得到打印编号,当这些发生时,我将我的数据打印编号添加为 phone 编号。这会导致不正确的数据。当我执行与上述完全相同的操作时,输出为
['0201 / 623424', '', 'E-Mail']
所以当我尝试取第一项时,它取了打印编号。如果有phone号,我只想拿走,如果没有,拿走继续。这可能吗?
要打印文本 0212 / 897645
你必须引入 for the visibility_of_element_located()
and you can use either of the following :
使用 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
参考资料
您可以在以下位置找到一些相关的详细讨论:
<div class="col_5">
<br>
<i class="phone">
:: Before
</i>
0212 / 897645
<br>
<i class="print">
:: Before
</i>
0212 / 111111
<br>
<br>
</div>
首先,我从网站获取数据并使用 pandas 将这些数据应用到 excel。
我有一个如上所述的 html 代码。我想取 <i class='phone'>
之后的 phone 号码并传递另一个号码。然而 phone 号码不属于我 class 所以我只能通过获取 <div class='col_5'>
的 'xpath' 来获得号码但这对我来说不安全因为一些 'divs' 没有 phone 号码,只有打印号码,这对我来说可能是致命的。例如,我尝试像那样找到 <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>
以上
我分享了没有 phone 号码但只有打印号码的代码。当我在第二个代码中得到 <div class='col_5'>
的 xpath 时,我只得到打印编号,当这些发生时,我将我的数据打印编号添加为 phone 编号。这会导致不正确的数据。当我执行与上述完全相同的操作时,输出为
['0201 / 623424', '', 'E-Mail']
所以当我尝试取第一项时,它取了打印编号。如果有phone号,我只想拿走,如果没有,拿走继续。这可能吗?
要打印文本 0212 / 897645
你必须引入 visibility_of_element_located()
and you can use either of the following
使用
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
参考资料
您可以在以下位置找到一些相关的详细讨论: