python - 无法单击选项包装器中的选项 - python selenium
问题描述
我无法在弹出气泡中选择一个选项(抱歉,我不太确定如何确定它是什么类型的弹出窗口)我真的不介意我选择什么选项,我只需要单击其中一个。这是它在代码中的样子:
<div data-v-d4e6e290="" class="f_input-optionsWrapper js_optionsWrapper" style=""><div data-v-d4e6e290="" class="f_input-options"><div data-v-d4e6e290="" class="f_input-header js_header">Oslovení</div> <div data-v-d4e6e290="" class="f_input-options-content"><div class="f_customScroll" data-v-d4e6e290="" style="max-height: 883px;"><div data-v-68c7351e="" class="f_input-option"><div data-v-68c7351e="" data-testid="Pan" class="f_input-option-text xh-highlight">
Pan
</div></div><div data-v-68c7351e="" class="f_input-option"><div data-v-68c7351e="" data-testid="Paní" class="f_input-option-text">
Paní
</div></div></div> <div data-v-d4e6e290="" class="f_input-footer js_footer"><!----> <span data-v-d4e6e290="" class="f_button f_button--common f_button_set--small">Potvrdit</span></div></div></div></div>
我尝试以多种方式定位元素,第一个问题是它总是检测到两个结果。弹出窗口是选择旅行者的性别,我有两个旅行者,所以我猜它也检测到第二个旅行者的第二个弹出窗口。
我试图找到:
volbaOsloveni = driver.find_elements_by_xpath("//*[@class='f_input-optionsWrapper js_optionsWrapper'] //*[@class='f_input-option-text']")
volbaOsloveni2 = driver.find_elements_by_xpath("//*[@data-testid='Pan']")
volbaOsloveni3 = driver.find_element_by_xpath("//*[@class='f_customScroll'] //*[@data-testid='Pan']")
所有这些都给了我两个我认为应该可行的结果。每当我尝试单击元素时,硒要么说它没有找到该元素,要么只是传递它,因为它已经单击了该元素并且脚本继续。
点击尝试:
volbaOsloveni[0].click()
driver.execute_script("arguments[0].click();", volbaOsloveni3)
volbaOsloveni2[1].click()
我尝试了 find_elementS 方法,因此我得到了更多结果,这就是为什么我尝试使用 [0] 等单击第一个元素的原因。execute_script 或 click() 都不能完成这项工作,我现在有点绝望。
有人可以帮我吗?将不胜感激!提前致谢
解决方案
要单击带有文本的元素,Pan
您可以使用以下任一Locator Strategies:
使用
css_selector
:driver.find_element(By.CSS_SELECTOR, "div.f_input-options div.f_input-options-content div[data-testid='Pan']").click()
使用
xpath
:driver.find_element(By.XPATH, "//div[@class='f_input-options']//div[@class='f_input-options-content']//div[@data-testid='Pan']").click()
所需的元素是动态元素,因此理想情况下,单击需要诱导WebDriverWait的元素element_to_be_clickable()
,您可以使用以下任一Locator Strategies:
使用
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.f_input-options div.f_input-options-content div[data-testid='Pan']"))).click()
使用
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='f_input-options']//div[@class='f_input-options-content']//div[@data-testid='Pan']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
推荐阅读
- ibm-cloud - IBM Speech to Text 服务调用返回错误
- android - 在我的 Nexus 5X 上不断发生的应用程序中的随机原生崩溃
- java - 创建服务以从 ListView 项连接到蓝牙
- jquery - 为什么数据对象有data.username字段
- php - 在 PHP 嵌套数组中使用 for 循环将其转换为单独的数组时出现问题
- python - treetagger 模块返回空列表
- azure-application-insights - Visual Studio 2017 中缺少 Application Insight
- python - 无法从动态内容中抓取某些链接
- spring-boot - JSP 不呈现 - Springboot 2.1.1
- javascript - 背景与内容脚本的沟通