使用Selenium查找Flexbox中的元素

hwamh0ep  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(299)

这是类似于以前提出的问题,但所有的解决方案,我发现不工作,在我独特的情况下,这个特定的网站。
我试图通过导航到selenium页面来单击单个顶部列表,但是我无法找到selenium列表,因为它们嵌套在一系列包含唯一ID和类名的flexbox中。不幸的是,似乎唯一可以一致访问所有url列表的方法是使用xpath,但由于嵌套的flexbox,无法访问xpath。
下面是该页面的html片段,其中包含我想查找并单击的项目:

下面是我的代码,使用XPATH无法找到元素-我尝试使用类和CSS选择器,但无法找到它。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import espected_conditions as EC
-
url = "https://www.stubhub.com/philadelphia-eagles-philadelphia-tickets-1-21-2023/event/151223773/?quantity=2&sections=195411%2C195410%2C195414%2C195413%2C195409%2C195408%2C195412%2C195415%2C195430%2C195427%2C195432%2C195433%2C195431%2C195428%2C195434%2C195429&ticketClasses=594&listingQty=&multi=true"
-
opt = Options()
opt.headless = False
driver = webdriver.Chrome('chromedriver.exe', options=opt)
driver.maximize_window()
driver.get(url)
wait = WebDriverWait(driver, 10)
-
wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="app"]/div[2]/div/div[2]/div[1]/div/div[2]/div/div/div[1]/div/div/div/div[2]/button')))
driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div/div[2]/div[1]/div/div[2]/div/div/div[1]/div/div/div/div[2]/button').click()

这段代码像往常一样正常地打开浏览器,但是一旦等待元素可单击的时间因找不到元素而超时,就会抛出超时异常。

vlju58qv

vlju58qv1#

在这种情况下,如果要单击第一个“Select”按钮,最好使用基于webelement类型(button)和按钮中包含的文本(Select)的xpath

xpath = "//button[text()='Select']"
wait.until(EC.element_to_be_clickable((By.XPATH, xpath))).click()

或者,您可以以类似的方式使用css选择器,但这次我们要查找具有属性shape=pillbutton,它是具有属性role=buttondiv的子级

css = "div[role='button'] button[shape='pill']"
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, css))).click()

请注意,您可以在wait command命令之后直接使用.click()

相关问题