簡體   English   中英

用Selenium和Python刪除HTML的動態元素

[英]Delete dynamic elements from HTML with Selenium and Python

我已經使用 BeautifulSoup 在頁面的 HTML 中找到特定的 div class。我想檢查這個 div 里面是否有跨度 class。 如果 div 具有跨度 class,我想在頁面代碼中維護它,但如果沒有,我想刪除它,可能使用 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()
    }
  }
""")

由於您無論如何都要在 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()
    }
  }
""")

注意:問題和評論讀起來有點混亂,所以稍微改進一下會很好。 假設你喜歡decompose()一些元素,這個動作之后的原因或做什么是不清楚的。 所以這個答案只會指出一個apporache。

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中,您可以根據需要對其進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM