在 python 中使用 selenium 从 span 元素中提取文本
Extract text from span element using selenium in python
我正在尝试使用 Selenium webdriver 的 find_element_by_xpath 方法从以下 HTML 代码中提取联系电话 (XXXXX-XXXXXX)。
<div id="contact-info">
<div class="a">
<div class="b">
<table class="c">
<tr>
<td class="d">
<div class="e">Contact Info</span></div>
</td>
<td class="f">
<div></div>
</td>
</tr>
</table>
</div>
<div class="g">
<div class="h">
<table>
<tr>
<td>
<div class="i"><span class="j">Mobile</span></div>
</td>
<td class="k">
<div class="random_class_name"><span><span dir="ltr">XXXXX-XXXXXX</span></span>
</div>
</td>
</tr>
</table>
</div>
这是我提取所需数据的代码-
print(browser.find_element_by_xpath('//div[@id="contact-info"]/div[1]/div[2]/div[1]/div[2]/span[1]/span[1]').text)
但是我抛出了一个异常,说找不到该元素。我在这里可能做错了什么?我该如何解决这个问题?
更正您的 XPath 为:
print(browser.find_element_by_xpath('//span[@dir="ltr"]').text)
要获得 Mobile-Number
你可以参考文本 Mobile
并找到下一个兄弟。
诱导 WebDriverWait
() 并等待 visibility_of_element_located
() 和跟随 xpath。
print(WebDriverWait(browser,10).until(EC.visibility_of_element_located((By.XPATH,"//td[.//div[contains(.,'Mobile')]]/following-sibling::td[1]/div"))).text)
您需要导入以下库。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
contactNumber = WebDriverWait(browser, 30).until(
EC.element_to_be_clickable((By.XPATH, "//div[@class='random_class_name']//span[1]//span")))
print contactNumber.text
或
contactNumber = WebDriverWait(browser, 30).until(
EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'XXXXX-XXXXXX')]")))
print contactNumber.text
注意:将以下导入添加到您的解决方案中:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
更新部分:
检查您的 table 是否在 iframe 中,如果是,则使用以下代码切换到 iframe ;
iframe=driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
我正在尝试使用 Selenium webdriver 的 find_element_by_xpath 方法从以下 HTML 代码中提取联系电话 (XXXXX-XXXXXX)。
<div id="contact-info">
<div class="a">
<div class="b">
<table class="c">
<tr>
<td class="d">
<div class="e">Contact Info</span></div>
</td>
<td class="f">
<div></div>
</td>
</tr>
</table>
</div>
<div class="g">
<div class="h">
<table>
<tr>
<td>
<div class="i"><span class="j">Mobile</span></div>
</td>
<td class="k">
<div class="random_class_name"><span><span dir="ltr">XXXXX-XXXXXX</span></span>
</div>
</td>
</tr>
</table>
</div>
这是我提取所需数据的代码-
print(browser.find_element_by_xpath('//div[@id="contact-info"]/div[1]/div[2]/div[1]/div[2]/span[1]/span[1]').text)
但是我抛出了一个异常,说找不到该元素。我在这里可能做错了什么?我该如何解决这个问题?
更正您的 XPath 为:
print(browser.find_element_by_xpath('//span[@dir="ltr"]').text)
要获得 Mobile-Number
你可以参考文本 Mobile
并找到下一个兄弟。
诱导 WebDriverWait
() 并等待 visibility_of_element_located
() 和跟随 xpath。
print(WebDriverWait(browser,10).until(EC.visibility_of_element_located((By.XPATH,"//td[.//div[contains(.,'Mobile')]]/following-sibling::td[1]/div"))).text)
您需要导入以下库。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
contactNumber = WebDriverWait(browser, 30).until(
EC.element_to_be_clickable((By.XPATH, "//div[@class='random_class_name']//span[1]//span")))
print contactNumber.text
或
contactNumber = WebDriverWait(browser, 30).until(
EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'XXXXX-XXXXXX')]")))
print contactNumber.text
注意:将以下导入添加到您的解决方案中:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
更新部分: 检查您的 table 是否在 iframe 中,如果是,则使用以下代码切换到 iframe ;
iframe=driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)