我使用BeautifulSoup在页面的HTML中找到了一个特定的div类。我想检查这个div中是否有一个span类。如果div有span类,我希望在页面的代码中维护它,但是如果没有,我想删除它,也许使用Selenium。
为此,我有两个选择元素的列表(div和span)。我试着检查一张单子是否在另一张名单里,这种方法很管用。但是如何从页面的源代码中删除找到的元素呢?
编辑
在评论部分的几次对话之后,我编辑了代码。在帮助下,我能够实现代码来删除执行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()
}
}
""")
发布于 2022-03-11 01:05:17
因为您要在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()
}
}
""")
发布于 2022-03-10 20:43:33
注意:的问题和评论读起来有点混乱,所以稍微改进一下就太好了。假设您喜欢decompose()
某些元素,此操作之后的原因或要做的事情还不清楚。因此,这个答案只会指出一个比例。
要decompose()
,不包含ads use this creative and text
的元素只需否定所选内容并迭代ResultSet
for e in soup.select('div._99s5:has(:not(:-soup-contains("ads use this creative and text")))'):
e.decompose()
现在,这些元素将不再包含在您的soup
中,您可以根据您的需要来处理它。
https://stackoverflow.com/questions/71429213
复制相似问题