Selenium从帖子中获取评论

2024-09-29 23:32:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从类中标记为跨距的网页检索文本。我已经用Xpath尝试过了,但这行不通,因为标签多次遇到。我用Jupyter笔记本写程序。在

以下是Instagram的一个例子:

<div class="C4VMK">
<a class="FPmhX notranslate TlrDj" title="henkbrinkman1994" 
href="/henkbrinkman1994/">henkbrinkman1994</a>
<span>Awesome!</span>
</div>

在这种情况下,我想得到的文字'太棒了在SPAN标记中。 如何在Selenium Python中执行此操作?在

Example


Tags: 标记文本程序div网页笔记本jupyter标签
3条回答

我没有Instagram帐户,也没有权限使用automation从他们的站点收集信息(参见他们的服务条款),所以我不能真正测试这个。我们的想法是使用find_element_by_xpath()来查找特定的post(或者使用find_elements_by_xpath()来获取所有的post)。在

my_post = driver.find_element_by_xpath('/xpath/to/a/post')

然后,对于每个帖子,使用相同的方法获取评论列表:

^{pr2}$

然后,您可以通过post_注释中的对象循环获取文本。在

for post in post_comments:
    print post.text

[也许有更有效的方法,但这会让你开始]

期望的元素看起来是一个动态元素,因此可以得到文本为的评论!您需要诱导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

您可以尝试替代定位器策略,因为它不能100%保证xpath每次都能正常工作。在

使用下面的css选择器

div[class='C4VMK'] span

或者

^{pr2}$

确保您的元素已经加载并且足够可见,如果没有,那么尝试不同的ExplicitWait条件使它们工作。在

相关问题 更多 >

    热门问题