python - 使用 Selenium 在 Flexbox 中查找元素

标签 python selenium flexbox

这与之前提出的问题类似,但是我找到的所有解决方案都不适用于该特定网站的独特场景。

我试图通过导航到带有 selenium 的页面来单击单个顶部列表,但是我无法找到带有 selenium 的列表,因为它们嵌套在一系列包含唯一 ID 和类名的 Flexbox 中。不幸的是,似乎我能够一致访问所有 url 列表的唯一方法是使用 xpath,但由于嵌套的 Flexbox,它无法访问。

这是该页面的 html 片段,其中包含我想要查找并单击的项目:

stubhub

这是我的代码,无法使用 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()

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

最佳答案

在这种情况下,如果您想单击第一个“选择”按钮,最好使用基于网络元素类型(按钮)和按钮中包含的文本的 xpath (选择)

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

或者,您可以以类似的方式使用 css 选择器,但这次我们正在寻找一个带有属性 shape=pillbutton,它是div 带有属性 role=button

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

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

关于python - 使用 Selenium 在 Flexbox 中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75141739/

相关文章:

python - SymPy 矩阵参数不可比较

python - 在 Python 中对字符串使用 .format 时出现 KeyError

python-3.x - 即使在 chromedriver 之后,Chrome 也会随机崩溃

javascript - 如何扩展缩短的 p 标签文本取决于下一个 p 标签?

html - 无法滚动到容器溢出的 flex 元素顶部

python - 如何平滑仅在某些部分具有大噪声的曲线?

python - 零除法错误: float division by zero - Python

java - 如何让 Ant 目标等待另一个目标完成

selenium - 无法从最近安装的 Chrome/ChromeDriver 中删除 "What' s New"选项卡

html - Flexbox 在 IE 10 中不工作