我正在尝试从网站上删除链接,但我似乎无法找到与产品相关的元素。
网站 = https://www.cvlinens.com/collections/table-linens?page=3
我的代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import pandas as pd
driver = webdriver.Chrome()
url = 'https://www.cvlinens.com/collections/table-linens?page=3'
driver.get(url)
try:
load = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'products-grid')))
except:
driver.close()
print('failed')
它不断返回“失败”。我也尝试过通过 xpath 和 css 选择器查找元素,但没有成功。
我在某处读到过有关 iframe 的内容,以及我需要如何切换到包含该元素的 iframe 来访问它。但我无法切换到 iframe。它也返回“失败”。
你的元素放置在shadow-root内部,要获取内部shadow root结构,你应该先获取它的主机,然后获取
shadowRoot
属性。
当前示例中的影子主机是 id 为
fast-simon-serp-app
的元素
get_shadow_root
函数使用JS执行器从主机获取影子根。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
timeout = 10
wait = WebDriverWait(driver, timeout)
def get_shadow_root(element):
return driver.execute_script('return arguments[0].shadowRoot', element)
driver.get("https://www.cvlinens.com/collections/table-linens?page=3")
driver.maximize_window()
shadow_host = wait.until(EC.visibility_of_element_located((By.ID, "fast-simon-serp-app")))
shadow_container = get_shadow_root(shadow_host)
grid = shadow_container.find_element(By.ID, 'products-grid')