硒得到帖子的评论

时间:2018-09-26 09:53:49

标签: python selenium xpath css-selectors webdriver

我正在尝试从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中做到这一点?

Example

3 个答案:

答案 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条件使它们起作用。