我正在尝试从CLASS中标记为SPAN的网页中检索文本。我已经使用Xpath尝试过此操作,但由于多次遇到该标签,因此无法使用。我使用Jupyter Notebook编写程序。
以下是Instagram的一个示例:
<div class="C4VMK">
<a class="FPmhX notranslate TlrDj" title="henkbrinkman1994"
href="/henkbrinkman1994/">henkbrinkman1994</a>
<span>Awesome!</span>
</div>
在这种情况下,我想获得文字“ Awesome!”在SPAN标记中。 如何在Selenium Python中做到这一点?
答案 0 :(得分:0)
我没有Instagram帐户,也没有使用自动化从其网站收集信息的权限(请参阅其服务条款),因此我无法真正进行测试。这个想法是,您将使用find_element_by_xpath()查找特定帖子(或使用find_elements_by_xpath()获取所有帖子)。
my_post = driver.find_element_by_xpath('/xpath/to/a/post')
然后针对每个帖子使用相同的方法来获取评论列表:
post_comments = my_post.find_elements_by_xpath('./relative/xpath/to/comments')
然后您可以循环浏览post_comments中的对象以获取文本。
for post in post_comments:
print post.text
[可能有更有效的方法,但这会让您入门]
答案 1 :(得分:0)
所需元素看起来是动态元素,因此要获得文本为 Awesome!的注释,您需要诱使 WebDriverWait 使元素可见,您可以使用以下任一解决方案:
XPATH#1
:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[contains(@class,'notranslate') and contains(.,'henkbrinkman1994')]//following::span[1]"))).get_attribute("innerHTML"))
XPATH#2
:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[contains(@class,'notranslate') and @title='henkbrinkman1994']//following::span[1]"))).get_attribute("innerHTML"))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
答案 2 :(得分:0)
您可以尝试使用替代定位器策略,因为它不能100%确保您的xpath每次都能正常工作。
在css选择器下面使用
div[class='C4VMK'] span
OR
.C4VMK span
请确保您的元素已加载并且足够可见,然后尝试不同的ExplicitWait条件使它们起作用。