簡體   English   中英

使用 selenium 單擊關閉元素

[英]Click on close element using selenium

我是 selenium 和 web 開發的新手。 我正在做一個項目,從web.archive.org的網站截取屏幕截圖。

這是示例網頁的鏈接 在捕獲屏幕截圖之前,我試圖單擊關閉按鈕(位於此頁面的右上角)。 我不確定關閉按鈕是什么類型的元素,我的嘗試沒有成功。

這是我試圖從 selenium 點擊的元素: 屏幕截圖中說明的示例

這里對應的是HTML

<a id="wm-tb-close" href="#close" style="top:-2px;" title="Close the toolbar"><span class="iconochive-remove-circle" style="color:#888888;font-size:240%;"></span></a>

這是我的代碼:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--start-maximized')
options.add_argument('--disable-dev-shm-usage')
options.binary_location = "<path-to-local-dir>/google-chrome/opt/google/chrome/google-chrome"
driver = webdriver.Chrome(options=options)
driver.get('https://web.archive.org/web/20220315011343/https://stackoverflow.com/')

# My attempts at closing the wayback toolbar:
# driver.find_element(By.LINK_TEXT, 'close').click()    # Attempt 1
# driver.find_element(By.ID, 'wm-tb-close').click() # Attempt 2
# driver.find_element_by_xpath("a[@title='Close the toolbar']").click() # Attempt 3

# Capture full webpage screenshot (with scrolling)
original_size = driver.get_window_size()
# required_width = driver.execute_script('return document.body.parentNode.scrollWidth')
required_height = driver.execute_script('return document.body.parentNode.scrollHeight')
driver.set_window_size(1920, max(required_height, 1080))
driver.find_element(By.TAG_NAME, 'body').screenshot('webpage_screenshot.png')  # avoids scrollbar
driver.set_window_size(original_size['width'], original_size['height'])  # reset to defaults

driver.quit()

當我嘗試使用三種技術(如代碼所示)單擊關閉按鈕時,我收到以下錯誤:

selenium.common.exceptions.NoSuchElementException:消息:沒有這樣的元素:無法定位元素

您嘗試單擊的元素位於 SHADOW-ROOT 內部,要訪問此類元素,您需要使用一些特殊技術。
您還需要使用 Expected Conditions 顯式等待讓元素在訪問它們之前加載。
這應該工作:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--start-maximized')
options.add_argument('--disable-dev-shm-usage')
options.binary_location = "<path-to-local-dir>/google-chrome/opt/google/chrome/google-chrome"
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 20)

driver.get('https://web.archive.org/web/20220315011343/https://stackoverflow.com/')
#locate the shadow root element
root_element = wait.until(EC.presence_of_element_located((By.ID, "wm-ipp-base")))
shadow_root = driver.execute_script('return arguments[0].shadowRoot', root_element)
#access the close button inside the shadow root
shadow_root.find_element_by_css_selector("span.iconochive-remove-circle").click()


暫無
暫無

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

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