python - 在 Python Selenium 中为不同的 mat-select 选项选择/定位定位器的问题
问题描述
我对 Python Selenium 模块有以下问题。我想比较一个基于 Web 的时间表应用程序和另一个纯粹用于声明执行特定任务的时间(也是基于 Web 的)和数量的应用程序之间的数据。为了做到这一点,我决定 Selenium 和后来的 Pandas 将是要走的路。在时间表应用程序中,可以直接以 csv 格式下载数据,这样使用 Python 或 VBA 就很容易处理。但是,时间量声明工具没有该功能,并且要选择特定的周末结束日,我必须点击 html 中的 mat-option 标签。我试图通过为此运行一个循环来实现这一点,但这就是它变得棘手的地方。我检查了第一个可编辑/可选择的日子有 id "mat-option-55", 所以这就是我的循环开始的地方(顺便说一句,这可能不是完美的方法,我愿意接受建议)。但是,一旦循环开始,在成功选择循环中的第一天并设法将输出保存到 .csv 后,它无法获得下一个,即 id "mat-option-56",抛出 "NoSuchElementException" 错误。再次检查该元素后,我看到以下项目已更改为 id “mat-option-139”,这让我一无所知。它如何以及为什么可以动态地改变它,我如何在我的代码中抑制这种行为?我尝试了 Select 方法,该方法适用于下拉菜单,但由于某种原因不适用于 mat-option。我基本上想要实现的是通过其可见文本(例如“2021 年 1 月 15 日”)获得一天并将卷转换为 .csv,不一定有循环 - 任何解决方案都可以。在花费数小时寻找解决方案(包括在线搜索)后,我无处可去。
任何帮助、提示或建议将不胜感激。先感谢您。
这是我的代码(的相关部分):
user_name = "user"
with open("./pass_word.txt") as pass_word:
pass_word = pass_word.read()
driver = webdriver.Chrome("./chromedriver.exe")#, options=options)
driver.get(Url)
sleep(2)
w3 = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="credentialSignin"]')))
w3.click()
username = driver.find_element_by_id('user-name-input')
username.send_keys(user_name)
password = driver.find_element_by_id('password-input')
password.send_keys(pass_word)
remember_address = driver.find_element_by_name('checkbox1_lbl').click()
sign_in_button = driver.find_element_by_id('login-button')
sign_in_button.submit()
sleep(2)
for d in range(55,199): #the count of editable days starts at 55, 199 being the last editable day
try:
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.ID, "mat-select-week-ending-dropdown"))).click()
day = driver.find_element_by_id(f'mat-option-{d}')
print(day.text)
day.send_keys(Keys.ENTER)
t = WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="container"]/div/div/div/ag-grid-angular/div/div[1]/div[2]/div[3]/div[2]/div/div'))).text
StringData = StringIO(t)
df = pd.read_csv(StringData, sep =";")
print(df)
df.to_csv(f"./test{d}.csv")
except: continue
循环中第一天的输出如下所示:
January 15, 2021
Action menu
0 0266 – NL- O2C
1 1448 – NL - O2C
2 1
3 1
4 1
5 1
6 5
7 Action menu
8 102 – Dispute/Deduction
9 1
10 7
11 7
12 7
13 7
14 35
15 Action menu
16 0107 – Credit Management
17 7
解决方案
推荐阅读
- c# - 如何调整此 LINQ 查询以避免 SORT 但仍检索 IEnumerable?
- layout - 新的stackoverflow网站设计(隐藏左面板)
- graph-theory - 带循环的术语图
- html - IE11 中的 SVG 缩放
- twitter-bootstrap - Bootstrap 3 Off Canvas 未在小页面上显示全高
- angular - Angular 5中的分页
- jquery - 如何修复引导模型的拖动区域
- asp.net-mvc - Asp .Net MVC,为什么我的 viewbag 总是不为空?
- c# - 当 IDENTITY_INSERT 设置为 OFF 时,无法在表“candidatedetails”中插入标识列的显式值
- php - 无法将 OctoberCMS 部署到 Google App Engine (Flex)