【发布时间】:2021-05-02 08:49:13
【问题描述】:
我正在尝试单击下拉列表中的元素,Selenium 能够找到并单击使列表出现的按钮,但它似乎无法定位列表本身弹出。我找到了控制列表的 HTML 并尝试了各种 find_element_by 方法,但没有一个能够找到它。
我尝试过使用 Select 模块以及 switch_to_frame(我不确定我做得是否正确),但我一点运气都没有。任何帮助将不胜感激。
编辑:
经过进一步调查,HTML 似乎有些“不正常”。当我从 Chrome 检查器复制 XPATH 时,它给了我 /html/body/div[5]/div/div/ul/li[3]/div/button,但是如果你注意到,第一个 div 元素是 div[5],但是查看 html,只有 4 个 div 元素是子元素的body。此外,当我复制 CSS 选择器时,我得到了 body > div:nth-child(13) > div > div > ul > li:nth-child(3) > div > button,但 body 的子节点总共只有 12 个。更奇怪的是,将这些定位器保持原样并尝试对其进行更正会产生相同的结果,这就是错误。
这是我的代码:
import time
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 expected_conditions as EC
from selenium.webdriver.support.select import Select
browser = webdriver.Chrome()
url = <url>
browser.get(url)
export1 = browser.find_element_by_xpath("//*[@id=\"react-main-content\"]/div[1]/section/div[1]/div[3]/div[2]/div/button")
time.sleep(1)
export1.click()
# This is the element it's unable to locate
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[4]/div/div/ul/li[3]/li/button")))
# Execution never reaches this point
export2 = browser.find_element_by_xpath("/html/body/div[4]/div/div/ul/li[3]/li/button")
export2.click()
这是 HTML(我无法正确格式化,所以这是一个屏幕截图。突出显示的部分是我正在寻找的下拉菜单):
这是打开下拉菜单的网页,并且我试图定位的下拉菜单中的元素突出显示。
【问题讨论】:
-
点击发生时会发生什么?下拉菜单打开了吗?
-
确实如此。 export1.click() 打开下拉列表,但 WebDriverWait 函数超时,因为它无法找到元素,即使我可以找到控制它的 HTML。
标签: python html selenium-webdriver