繁体   English   中英

在 Python 中使用 Selenium 从下拉菜单中检索数据的最佳方法是什么?

[英]What's the best way to retrieve data from a drop down menu using Selenium in Python?

我正在尝试遍历 Web 元素,找到带有可扩展菜单的元素,然后将该信息保存在菜单中。 这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#open chrome tab
driver = webdriver.Chrome(executable_path='C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe')

#open the url
driver.get('https://app.smartsheet.com/sheets/Phfqpp2qpvrfjw9jPggm8fRfWgqgj2mgXv5xjh71?view=grid')

#find email input box
email = driver.find_element_by_xpath('/html/body/table/tbody/tr[1]/td[2]/form/div[2]/div[3]/div[2]/div/table/tbody/tr[1]/td/div/table/tbody/tr[1]/td/input')

#type username
email.send_keys('USERNAME')
email.send_keys(Keys.RETURN)

time.sleep(1)

#find password input box
password = driver.find_element_by_xpath('/html/body/table/tbody/tr[1]/td[2]/form/div[2]/div[3]/div[2]/div/table/tbody/tr[1]/td/div/table/tbody/tr[2]/td/input')

#type password
password.send_keys('PASSWORD')
password.send_keys(Keys.RETURN)

time.sleep(12)

#find activity log button
activity_log = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[2]/div[3]/div[5]/div[3]/div/div/button[6]')

#click the activity log button
activity_log.click()

time.sleep(1)

#find input box for start date
start_date = driver.find_element_by_xpath('/html/body/div[1]/div[6]/div/div[1]/div[1]/span[1]/div[3]/input')

#type in necessary date
start_date.clear()
start_date.send_keys('06/07/21')

#apply the date change
apply = driver.find_element_by_xpath('/html/body/div[1]/div[6]/div/div[1]/div[1]/span[1]/span[6]/div/div')

apply.click()

#find drop down menu carets
entries = driver.find_elements_by_class_name('clsHistoryItemCaret')

这会登录我的帐户并正确打开活动日志,其中包含我需要的数据。 但是,当我尝试按类名查找可扩展项时,它会崩溃。 这是下拉菜单的按钮的 HTML 视图,其中包含我需要的信息。

活动日志的 HTML 视图

类名搜索未找到任何元素。 所以,我想知道我是否做错了什么,或者更好的是,有一种更有效的方法来做到这一点。

问题是点击后下拉菜单尚未加载,然后添加 time.sleep 允许找到网络元素。

与其睡觉,您可能还想为关闭按钮找到一个好的定位器,然后等待它出现。 这些睡眠开始累积。

您可能想开始使用以下表达式:

wait.until(EC.element_to_be_clickable((By.XPATH, 'your xpath here'))).click()

其中 EC 被导入为

from selenium.webdriver.support import expected_conditions as EC

并等待设置为

wait = WebDriverWait(driver, 15)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM