![](/img/trans.png)
[英]How to select values from multiple layers of dropdown menu using Selenium
[英]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 methond。 以下是Java方法:
Select droplist = new Select(driver.findElement(By.CSS_SELECTOR("select")));
以下是Python方法:
droplist = driver.find_element_by_css_selector('select')
我將使用項目的值來找到下拉列表。 這是您的頁面的有效示例:
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()
請注意,第二項“ PlaceHolder”沒有鏈接。
您嘗試使用onchange
屬性
driver.find_element_by_css_selector('onchange*="document.getElementById('11qq')"')
這將為您提供具有onchange
屬性的元素witch包含"document.getElementById('11qq')"
的元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.