Javascript 无法在Python中使用Selenium访问下拉选择
我是Python中使用Selenium的新手,我正在尝试访问Barclays Live网站上的索引数据。登录并加载页面后,我将尝试从页面的下拉列表中选择“Custom1”。与列表关联的HTML代码中的select对象如下所示:Javascript 无法在Python中使用Selenium访问下拉选择,javascript,python,html,selenium,xpath,Javascript,Python,Html,Selenium,Xpath,我是Python中使用Selenium的新手,我正在尝试访问Barclays Live网站上的索引数据。登录并加载页面后,我将尝试从页面的下拉列表中选择“Custom1”。与列表关联的HTML代码中的select对象如下所示: <select name="customViewId" class="formtext" onchange="submitFromSelect('username');return false;"> <option value="">&am
<select name="customViewId" class="formtext" onchange="submitFromSelect('username');return false;">
<option value=""> </option>
<option value="Favorite Indices">Favorite Indices</option>
<option value="Custom1">Custom1</option>
<option value="CB group">CB group</option>
<option value="Kevin Favorites">Kevin Favorites</option>
<option value="LB Gov/Cdt intermediate">LB Gov/Cdt intermediate</option>
</select>
我已经尝试了许多我已经找到的建议解决方案,通常都会出现无法定位元素的错误:然后是我试图访问select对象的任何方法。我似乎无法通过名称、xpath或使用Select函数访问它。我已经尝试在代码中加入等待时间,以防元素还没有加载,并且没有运气。以下是一些我希望能起作用但不能起作用的例子:
select_box = browser.find_element_by_name("customViewId")
select_box = browser.find_element_by_xpath("//select[option[@value='Custom1']]"
我没有编程方面的背景,如果这是个愚蠢的问题,请别客气。提前谢谢你的帮助 一种通过向选定元素发送键来更改选定元素的方法 首先找到select元素,然后向其发送键。通常只需要前1-3个字母就可以从元素中获得正确的唯一结果
select_elem = browser.find_element_by_name("customViewId")
select_elem.send_keys("cu")
另一个选项是发送箭头键笔划或类似的内容,或者执行。单击选择,然后从下拉列表中选择,或者如果不先单击发送键不起作用,则发送键
此外,您还可以查找相对于另一个图元的图元,例如:
select_box = browser.find_element_by_name("customViewId")
option = select_box.find_element_by_xpath("/[option[@value='Custom1']]") #example only - untested for this case
最后,另一种选择是使用browser.execute_脚本任意执行一些JavaScript来更改元素,但编写JS代码来执行这一点可能超出了本文的范围
YMMV取决于特定页面/方法
select元素确实位于iframe中 这意味着您应该进入框架的上下文,然后才能找到元素:
browser.switch_to.frame("frame_name_or_id")
select_box = browser.find_element_by_name("customViewId")
如果需要从帧的上下文返回,请使用:
browser.switch_to.default_content()
至于操纵选择框零件,有一种更好的方法-使用:
我也尝试了各种方法来解决这个问题。 不幸的是,我无法用上述方法解决这个问题。 但是,我的问题已经通过使用SendClick事件到action元素解决了
select = browser.find_element_by_xpath("//select[@id='reservation_period']")
for option in select.find_elements_by_xpath(".//option"):
if option.text == "2 Days":
option.click()
break
select.send_keys(Keys.ARROW_DOWN)
您能检查一下这个select元素是否位于iframe中吗?select元素确实位于iframe中。不幸的是,这对我不起作用。尝试首先查找select元素时出错。browser.find_element_by_name会导致错误。好的,我明白了。您的问题不是选择选项。。。但更确切地说。。。正在选择要开始的select元素。我误解了,不知道它在一个iFrame中
from selenium.webdriver.support.select import Select
select_box = Select(browser.find_element_by_name("customViewId"))
select_box.select_by_visible_text("CB group")
select = browser.find_element_by_xpath("//select[@id='reservation_period']")
for option in select.find_elements_by_xpath(".//option"):
if option.text == "2 Days":
option.click()
break
select.send_keys(Keys.ARROW_DOWN)