首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Selenium和Python从HTML中删除动态元素

用Selenium和Python从HTML中删除动态元素
EN

Stack Overflow用户
提问于 2022-03-10 18:41:38
回答 2查看 549关注 0票数 0

我使用BeautifulSoup在页面的HTML中找到了一个特定的div类。我想检查这个div中是否有一个span类。如果div有span类,我希望在页面的代码中维护它,但是如果没有,我想删除它,也许使用Selenium。

为此,我有两个选择元素的列表(div和span)。我试着检查一张单子是否在另一张名单里,这种方法很管用。但是如何从页面的源代码中删除找到的元素呢?

编辑

在评论部分的几次对话之后,我编辑了代码。在帮助下,我能够实现代码来删除执行javascript的元素。

代码运行时没有错误,但是没有从页面中删除任何内容。

代码语言:javascript
复制
# Import required module
from selenium import webdriver 
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import time

# Option to launch browser in incognito
options = Options()
options.add_argument("--incognito")
#options.add_argument("--headless")

# Using chrome driver
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)

# Web page url request
driver.get('https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=BR&q=frete%20gr%C3%A1tis%20aproveite&sort_data[direction]=desc&sort_data[mode]=relevancy_monthly_grouped&search_type=keyword_unordered&media_type=all')
driver.maximize_window()
time.sleep(10)

driver.execute_script("""
  for(let div of document.querySelectorAll('div._99s5')){
    let match = div.innerText.match(/(\d+) ads? use this creative and text/)
    let numAds = match ? parseInt(match[1]) : 0
    if(numAds < 10){
      div.querySelector(".tp-logo")?.remove()
    }
  }
""")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-11 01:05:17

因为您要在javascript中删除它们:

代码语言:javascript
复制
driver.execute_script("""
  for(let div of document.querySelectorAll('div._99s5')){
    let match = div.innerText.match(/(\d+) ads? use this creative and text/)
    let numAds = match ? parseInt(match[1]) : 0
    if(numAds < 10){
      div.querySelector(".tp-logo")?.remove()
    }
  }
""")
票数 2
EN

Stack Overflow用户

发布于 2022-03-10 20:43:33

注意:的问题和评论读起来有点混乱,所以稍微改进一下就太好了。假设您喜欢decompose()某些元素,此操作之后的原因或要做的事情还不清楚。因此,这个答案只会指出一个比例。

decompose(),不包含ads use this creative and text的元素只需否定所选内容并迭代ResultSet

代码语言:javascript
复制
for e in soup.select('div._99s5:has(:not(:-soup-contains("ads use this creative and text")))'):
    e.decompose()

现在,这些元素将不再包含在您的soup中,您可以根据您的需要来处理它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71429213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档