Python Selenium - 如何提取/排除论坛帖子中的特定标签或元素?

Ben*_*ang 0 python selenium

我为论坛游戏构建了一个网络爬虫,其中玩家使用 [b] 粗体 [/b] 标签中的特定关键字来发出命令。机器人的工作是遍历线程并记录所有玩家的命令,但是我遇到了一个问题,如果玩家 A 引用玩家 B 的帖子,机器人会读取引用中玩家 B 的命令并更新玩家 A 的桌子。

我找到了引用框的具体类名,但我不知道如何从整个帖子正文中删除该类。

我尝试使用 get_attribute('innerHTML') 将帖子转换为文本,并使用正则表达式成功将其删除,但是我编写的用于提取粗体标签的代码 (find_attribute_by_tag_name) 变得无效。

我有两个问题想请教在这里发帖的各位大神:

  1. 有没有办法从帖子正文中删除特定元素?我在谷歌上进行了搜索,但找不到有效的解决方案

  2. 否则,有没有办法可以将从 get_attribute('innerHTML') 获得的 HTML 转换回元素?

def ScrapPosts( driver ):
  posts=driver.find_elements_by_class_name("postdetails")
  print("Total number of posts on this page:", len(posts))
  for post in posts:
      #print("username:",post.find_element_by_tag_name("Strong").text)
      username=post.find_element_by_tag_name("Strong").text.upper()


      #remove the quote boxes before sending to check command?
      post_txt=post.find_element_by_class_name("content")
      CheckCommand(post_txt, username)
Run Code Online (Sandbox Code Playgroud)

小智 5

  1. Selenium 没有内置的删除元素的方法。但是,您可以执行一些 javascript 代码来删除引号框元素。请参阅相关问题:/sf/answers/1576397721/

此代码将删除具有类名 quoteBox 的所有元素,如果您只更改类名,我认为这对您有用。

    driver.execute_script('''
        var element = document.getElementsByClassName("quoteBox"), index;
        for (index = element.length - 1; index >= 0; index--) {
            element[index].parentNode.removeChild(element[index]);
        }
    ''')
Run Code Online (Sandbox Code Playgroud)
  1. 相同的答案-没有内置的方法,但你可以使用 javascript。这种方法可能比第一种方法复杂得多。