Python selenium 下拉菜单点击
Posted
技术标签:
【中文标题】Python selenium 下拉菜单点击【英文标题】:Python selenium drop down menu click 【发布时间】:2016-11-12 11:21:21 【问题描述】:我想从下拉菜单中选择选项,为此我使用它:
br.find_element_by_xpath("//*[@id='adyen-encrypted-form']/fieldset/div[3]/div[2]/div/div/div/div/div[2]/div/ul/li[5]/span").click()
要选择选项第 4 个月,但是当我这样做时,pyhton 返回错误消息:
selenium.common.exceptions.ElementNotVisibleException:消息: 元素不可见(会话信息:chrome=51.0.2704.103)(驱动程序 信息:chromedriver=2.22.397929 (fb72fb249a903a0b1041ea71eb4c8b3fa0d9be5a),平台=Mac OS X 10.11.5 x86_64)
那是html代码:
</div>
<div class="form-row exp-date clearfix fancyform">
<div class="formfield expired-label monthcaption">
<label>Date d'expiration <span>*</span></label>
</div>
<div class="formfield month">
<div class="value value-select">
<select class="selectbox required" id="dwfrm_adyenencrypted_expiryMonth" data-missing-error="Veuillez sélectionner le mois d'expiration" data-parse-error="Ce contenu est invalide" data-range-error="Ce contenu est trop long ou trop court" data-value-error="Cette date d'expiration est invalide" pattern="^(:?0[1-9]|1[0-2])$" required="required" >
<option class="selectoption" label="Mois" value="">Mois</option>
<option class="selectoption" label="01" value="01">01</option>
<option class="selectoption" label="02" value="02">02</option>
<option class="selectoption" label="03" value="03">03</option>
<option class="selectoption" label="04" value="04">04</option>
<option class="selectoption" label="05" value="05">05</option>
<option class="selectoption" label="06" value="06">06</option>
<option class="selectoption" label="07" value="07">07</option>
<option class="selectoption" label="08" value="08">08</option>
<option class="selectoption" label="09" value="09">09</option>
<option class="selectoption" label="10" value="10">10</option>
<option class="selectoption" label="11" value="11">11</option>
<option class="selectoption" label="12" value="12">12</option>
</select>
怎么了?我知道 selenium 找不到元素,但我不知道为什么,xpath 错误?我需要使用其他方法来查找元素吗?谢谢回复
【问题讨论】:
欢迎来到 Stack Overflow!你尝试过什么,结果如何?请阅读有关如何提出好问题的帮助主题。您需要研究自己的问题,查找代码示例等并编写自己的代码来解决问题。如果您做了所有这些但仍然无法弄清楚,那么回来编辑您的问题并添加您所做研究的注释,您尝试的代码减少到minimal reproducible example,结果是什么......任何错误消息等。包含任何相关的 HTML 并正确格式化 HTML 和代码也非常重要。 【参考方案1】:您应该使用Select()
从下拉列表中选择一个选项,如下所示:-
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.ID, "dwfrm_adyenencrypted_expiryMonth")))
select = Select(element)
select.select_by_value("04")
已编辑 :- 如果不幸的是上述方法不起作用,您也可以尝试使用.execute_script()
,如下所示:-
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "dwfrm_adyenencrypted_expiryMonth")))
driver.execute_script("var select = arguments[0]; for(var i = 0; i < select.options.length; i++) if(select.options[i].value == arguments[1]) select.options[i].selected = true; ", element, "04")
希望它会起作用...:)
【讨论】:
我尝试过,但 python 返回此错误消息:selenium.common.exceptions.ElementNotVisibleException:消息:元素不可见:元素当前不可见,可能无法操作(会话信息:chrome=51.0. 2704.103) (驱动信息: chromedriver=2.22.397929 (fb72fb249a903a0b1041ea71eb4c8b3fa0d9be5a),platform=Mac OS X 10.11.5 x86_64) @robin Mistr 尝试使用.execute_script()
并告诉我...查看编辑后的答案
什么是 BY ? element = wait.until(EC.visibility_of_element_located((By.ID, "dwfrm_adyenencrypted_expiryMonth"))) NameError: name 'By' is not defined
看看BY
类...selenium-python.readthedocs.io/locating-elements.html
用 2 方法说:raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:以上是关于Python selenium 下拉菜单点击的主要内容,如果未能解决你的问题,请参考以下文章
Selenium - Python - 选择 - 下拉菜单链接
python selenium怎么定位图中这种下拉框的选项?