Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在Python中使用Selenium访问下拉选择_Javascript_Python_Html_Selenium_Xpath - Fatal编程技术网

Javascript 无法在Python中使用Selenium访问下拉选择

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

我是Python中使用Selenium的新手,我正在尝试访问Barclays Live网站上的索引数据。登录并加载页面后,我将尝试从页面的下拉列表中选择“Custom1”。与列表关联的HTML代码中的select对象如下所示:

<select name="customViewId" class="formtext" onchange="submitFromSelect('username');return false;">
    <option value="">&nbsp;</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)