如何使用selenium选择没有id的下拉菜单
How to select dropdown menu without id using selenium
我试着通过CSS选择器在页面上选择一个下拉菜单(没有id),但我无法让它工作。这是下拉代码:
<select style="margin: 5px auto; width: 146px;" onchange="document.getElementById('11qq').src=this.options[this.selectedIndex].value;">
<option value="https://player.vimeo.com/video/158733095">Shakedown</option>
<option value="x">Placeholder</option>
<option value="https://player.vimeo.com/video/158815551">Race</option>
</select>
我尝试使用以下代码来选择每个下拉列表元素,之后我想找到相关的视频数据(注意,我假设我不知道下拉列表中的内容,因为我希望它适用于此网站上的任何下拉列表):
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
import urllib2
url = "http://racing4everyone.eu/2016/03/12/formula-e-201516-round05-mexico/"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read(), "html.parser")
dropdown = [x.text for x in soup.find_all('option')]
driver = webdriver.Firefox()
driver.get("http://racing4everyone.eu/2016/03/12/formula-e-201516-round05-mexico/")
for x in dropdown:
Select droplist = new Select(driver.findElement(By.CSS_SELECTOR("select")));
droplist.selectByVisibleText(x);
frame_video = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[src*=video]")))
driver.switch_to.frame(frame_video)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".controls")))
page_source = driver.page_source
driver.close()
soup = BeautifulSoup(page_source, "html.parser")
script = soup.find_all("script")
# A couple of other operations follow to isolate the relevant data from the script data
我从下面的stackoverflow讨论中得到的Select droplist
部分(第二个答案)。然而,我得到以下错误:
Select droplist = new Select(driver.findElement(By.CSS_SELECTOR("select")));
^
SyntaxError: invalid syntax
也许您在python中使用了java方法。以下是Java方法:
Select droplist = new Select(driver.findElement(By.CSS_SELECTOR("select")));
以下是Python方法:
droplist = driver.find_element_by_css_selector('select')
您可以尝试使用onchange
属性
driver.find_element_by_css_selector('onchange*="document.getElementById('11qq')"')
这将为您提供具有onchange
属性的元素witch包含"document.getElementById('11qq')"
。
我会使用项的值来定位下拉列表。以下是您的页面的工作示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
driver = webdriver.Firefox()
wait = WebDriverWait(driver, 10)
driver.get("http://racing4everyone.eu/2016/03/12/formula-e-201516-round05-mexico/")
for x in ["Shakedown", "Race"]:
# select the option
Select(driver.find_element_by_xpath("//select[option='" + x + "']")).select_by_visible_text(x)
# set context on the video frame
frame_video = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[src*=video]")))
driver.switch_to.frame(frame_video)
# set the default context
driver.switch_to_default_content()
driver.quit()
请注意,第二项"占位符"没有链接。
相关文章:
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- angular的下拉菜单
- 创建带有和不带有JavaScript的Bootstrap下拉菜单
- 创建下拉菜单
- 下拉菜单在菜单按钮的边缘闪闪发光
- I'我设计了一个下拉菜单,onclick会出现,而on blur会消失
- 硒IDE下拉菜单
- 我的下拉菜单中的链接不起作用
- Bootstrap Dropdown selection是在*all*下拉菜单上设置选择
- 如何将JSON转换为HTML下拉菜单
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 基于下拉菜单创建开关
- 如何使用selenium选择没有id的下拉菜单
- Javascript如何使用类而不是id作为下拉菜单
- 使用javascript动态创建具有不同id的多个下拉菜单
- 使用页面id's的Html下拉菜单
- 如何在没有元素ID的下拉菜单中选择Javascript选项?
- 如何更改具有特定id的Bootstrap下拉菜单的值
- 下拉菜单,添加更多id
- 在rails 4, bootstrap 3中根据类别id更改下拉菜单的文本