【发布时间】:2019-01-06 03:32:08
【问题描述】:
我遇到了在 Selenium 中无法通过的下拉菜单。 我正在尝试使用 Selenium 从此链接收集一些价格数据: https://xxx。在此链接中,您需要点击一个按钮(下一步),然后在随后的下拉列表中选择任意选项,然后再次按(下一步)进入我想收集一些信息的信息页面。我卡在下拉列表中 - 我无法选择任何选项。
这是我目前的代码:
browser.get("https://xxx/#/pricePlans/step1")
wait = WebDriverWait(browser, 10)
while True:
try:
button = browser.find_element_by_css_selector('body > div.md-dialog-container.ng-scope > md-dialog > md-dialog-actions > div > button')
except TimeoutException:
break
button.click()
options_box= browser.find_element_by_class_name('bullet-content-title')
wait = WebDriverWait(browser, 5)
options_box.click()
问题在于下拉选项(它有 HDB 1-room、HDB 2-room 等选项)。我试图通过 XPATH、CSS 选择器、class_name(如上所示)引用选项框,但使用上面的 sn-p,Spyder 会超时。我尝试过的其他 sn-ps 包括:
ui.WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "bullet-content-title")))
使用 XPATH、class_name 但没有运气。 我是网络抓取的新手,到目前为止通过搜索 SO,但我无法找到有关 (md-select) 下拉列表的很多解决方案。 我也尝试使用
ActionChains(driver).move_to_element(options_box).click(options_box)
但我没有看到任何点击或鼠标移动,所以我很难过。 我很感激此时的任何建议。太感谢了!
编辑: 代码片段和响应:
from selenium import webdriver
from selenium.webdriver.support import ui
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.action_chains import ActionChains
option = webdriver.ChromeOptions()
option.add_argument('--incognito')
browser = webdriver.Chrome(executable_path='C:\\ChromeDriver\\chromedriver.exe', options=option)
browser.get("https://xxx")
wait = WebDriverWait(browser, 10)
while True:
try:
button = browser.find_element_by_css_selector('body > div.md-dialog-container.ng-scope > md-dialog > md-dialog-actions > div > button')
except TimeoutException:
break
button.click()
options_box = browser.find_element_by_class_name('bullet-content-title')
wait = WebDriverWait(browser, 5)
options_box.click()
这将返回“StaleElementReferenceException:过时的元素引用:元素未附加到页面文档” 我认为这是由于第二个“下一步”按钮的存在,该按钮目前是惰性的。
options_box = ui.WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "bullet-content-title")))
options_box.click()
什么都不做。 Spyder 最终返回给我 TimeOut 错误。
【问题讨论】: