python - 单击带有硒的下拉菜单
问题描述
我正在尝试使用 selenium 在 quizlet.com 上创建抽认卡。如果您访问,您将在导航栏中看到一个“创建”按钮(或只是一个“+”,具体取决于窗口大小),当您单击此按钮时,它会变成一个下拉菜单,其中包含另外 3 个按钮:“学习集”、“文件夹” '和'类'。(我正在尝试单击学习集)
首先,我什至不确定是否需要 selenium 单击第一个“创建”按钮以访问“学习集”按钮,或者我是否可以直接跳到“学习集”按钮。无论如何,这里是分别与“创建”按钮和“学习集”按钮相关的 html:
<button type="button" aria-label="Create"><span>Create</span>/button>
和:(注意,所有 3 个按钮共享类“UILink”,第一个按钮是“学习集”按钮,评论是我的)
<div class="s1ovpdog"> <!-- going to grab this div first because theres 85 elements with the class 'UILink' on the page, grabbing this div cuts it to 3-->
<button class="UILink" type="button"> <!-- then going to grab this button-->
<div class="c1ap9d88">
<div class="iiekfr8">
<div class="i1q3l8tw">
<svg aria-label="sets" class="AssemblyIcon AssemblyIcon--medium" role="img"><noscript></noscript>
<use xlink:href="#sets"></use><noscript></noscript></svg><span class="AssemblyMenuItem--title t1nsp0j0">Study set</span>
</div>
</div>
</div>
</button>
<button class="UILink" type="button">
<div class="c1ap9d88">
<div class="iiekfr8">
<div class="i1q3l8tw">
<svg aria-label="folder" class="AssemblyIcon AssemblyIcon--medium" role="img"><noscript></noscript>
<use xlink:href="#folder"></use><noscript></noscript></svg><span class="AssemblyMenuItem--title t1nsp0j0">Folder</span>
</div>
</div>
</div>
</button>
<button class="UILink" type="button">
<div class="c1ap9d88">
<div class="iiekfr8">
<div class="i1q3l8tw">
<svg aria-label="class" class="AssemblyIcon AssemblyIcon--medium" role="img"><noscript></noscript>
<use xlink:href="#class"></use><noscript></noscript></svg><span class="AssemblyMenuItem--title t1nsp0j0">Class</span>
</div>
</div>
</div>
</button>
</div>
Python代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome('./chromedriver')
driver.get("https://quizlet.com")
# Code to log in to quizlet omitted...
# Grab and click first 'Create' button
create_button = driver.find_element_by_xpath("//button[@aria-label='Create']") # only one element has this aria-label
create_button.send_keys(Keys.RETURN) # doesn't display drop-down menu, makes me think something is wrong here but also does not throw an error
# Grab and click 'Study Set' button
div_containting_study_set_button = driver.find_element_by_class_name('s1ovpdog') # only one element has this class
study_set_button = div_containting_study_set_button.find_elements_by_class_name('UILink')[0] # returns 3 buttons, only need first one
study_set_button.send_keys(Keys.RETURN) # Error,ElementNotInteractableException
当我运行它时,它会抛出
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interac
table
虽然study_set_button
肯定应该引用一个button
元素,我相信?感谢您对此的任何帮助。
编辑:搜索后,我找到is_displayed()
并运行
create_button.is_displayed() # True
study_set_button.is_displayed() #False
这分别返回True
和False
。认为我的问题出在某处。
解决方案
这就是我发现的工作。在下拉列表中找到“学习集”的唯一定位器并不容易。页面上有两个“学习集”元素,DOM 中的第一个不可见。我添加了等待只是为了安全起见,因为您正在单击并且必须加载下拉列表。您可能不需要等待,但为了以防万一,拥有它们不会有什么坏处(它不会减慢任何速度)。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[aria-label='Create']"))).click()
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.UIOverlayTrigger-content svg[aria-label='sets'] + span"))).click()
推荐阅读
- javascript - 类型“NumberSchema”上不存在属性“长度”
- docker - 使用来自 docker 的 openvino
- javascript - 更改 AWS cognito 登录 UI 中的文本
- javascript - 如何从在 AJAX 中创建的表中获取“innerText”内的项目总和?
- c# - 尝试从过程中获取数据时:PL/SQL - 数字或值错误
- css - 引导行大纲
- c++ - 为链接列表中的函数设置参数
- python - 在数据框中搜索同一对(Python)
- c# - 如何使用自定义错误模型返回 BadRequest 响应?网页 API 2
- python - 在没有熊猫的情况下将 sqlalchemy 对象返回到数据库表的最佳方法是什么?