python-selenium更改框架不工作
我试图浏览网页,以便下载一些csv文件。问题是,有一个下拉列表,每次你改变它的页面重新加载。所以我尝试使用硒来解决这个问题 该网页有两个框架。在name=“left”框中,它是下拉列表。因此,我使用以下代码访问该帧: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
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> </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()
是一个阻塞调用,而隐式地等待()
只是指示驱动程序在以后搜索元素时等待多长时间。