python-selenium更改框架不工作

python-selenium更改框架不工作,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我试图浏览网页,以便下载一些csv文件。问题是,有一个下拉列表,每次你改变它的页面重新加载。所以我尝试使用硒来解决这个问题 该网页有两个框架。在name=“left”框中,它是下拉列表。因此,我使用以下代码访问该帧: from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.common.exceptions import WebDriverExcept

我试图浏览网页,以便下载一些csv文件。问题是,有一个下拉列表,每次你改变它的页面重新加载。所以我尝试使用硒来解决这个问题

该网页有两个框架。在name=“left”框中,它是下拉列表。因此,我使用以下代码访问该帧:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import WebDriverException

print os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'driver')+'\\chromedriver.exe')
chromedriver_path =os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'driver')+'\\chromedriver.exe')
driver = webdriver.Chrome(chromedriver_path)
driver.implicitly_wait(10)
driver.get(url2)
frames = []
frames = driver.find_elements_by_tag_name('frame')
for frame in frames:
    print frame.get_attribute('name')

driver.switch_to_frame('left')

elements = []
elements = driver.find_elements_by_xpath('//select')

print elements
遗憾的是,结果如下:

left
right
[]
框架名称已找到,但当我搜索组合框时,它不起作用

主机架

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<frameset cols="600,*" id="frMain" name="frMain">
  <frame id="left" name="left" src="">
  <frame id="right" name="right" src="" frameborder="0" noresize="noresize" scrolling="no">
</frameset>
</html>

左框

<!DOCTYPE html>
<html>
<head>
</head>
<body onload="Init()">
<table border="0" cellspacing="0" cellpadding="0" style="width: 100%">
<tr align="left" valign="top">
    <td>&nbsp;</td>
    <td>
      <tr>
        <td colspan="1">
            <select id="ic" name="ic" onchange="EnablePeriod();Open()" style="width: 240px;">
                <option></option>
                <option></option>

以下操作应该有效-

leftframe = driver.find_element_by_name('left')
driver.switch_to.frame(leftframe)

elements = []
elements = driver.find_elements_by_xpath('//select')

print elements

以下各项应起作用:

leftframe = driver.find_element_by_name('left')
driver.switch_to.frame(leftframe)

elements = []
elements = driver.find_elements_by_xpath('//select')

print elements

不是100%确定,但我认为问题可能与必须通过
frameset
元素导航才能找到单个帧有关。我以前从未遇到过这种情况,但希望对导航
frameset
->“frames”进行一点研究,可以帮助我做一个理智的检查:如果你加上
时间怎么办。睡眠(10)切换到表单后,在搜索
元素之前,选择
元素?奇怪的是,睡眠(2)没有工作,但驱动程序却没有。隐式地等待(10)没有。谢谢@alecxe!谢谢大家的帮助@GriffiN这是因为
time.sleep()
是一个阻塞调用,而
隐式地等待()
只是指示驱动程序在以后搜索元素时等待多长时间。不是100%确定,但我认为问题可能与必须通过
frameset
元素来查找单个帧有关。我以前从未遇到过这种情况,但希望对导航
frameset
->“frames”进行一点研究,可以帮助我做一个理智的检查:如果你加上
时间怎么办。睡眠(10)切换到表单后,在搜索
元素之前,选择
元素?奇怪的是,睡眠(2)没有工作,但驱动程序却没有。隐式地等待(10)没有。谢谢@alecxe!谢谢大家的帮助@GriffiN这是因为
time.sleep()
是一个阻塞调用,而
隐式地等待()
只是指示驱动程序在以后搜索元素时等待多长时间。不是100%确定,但我认为问题可能与必须通过
frameset
元素来查找单个帧有关。我以前从未遇到过这种情况,但希望对导航
frameset
->“frames”进行一点研究,可以帮助我做一个理智的检查:如果你加上
时间怎么办。睡眠(10)切换到表单后,在搜索
元素之前,选择
元素?奇怪的是,睡眠(2)没有工作,但驱动程序却没有。隐式地等待(10)没有。谢谢@alecxe!谢谢大家的帮助@GriffiN这是因为
time.sleep()
是一个阻塞调用,而
隐式地等待()
只是指示驱动程序在以后搜索元素时等待多长时间。