Python selenium从下拉列表中选择第一个元素

时间:2017-01-11 02:22:05

标签: python selenium

下面的代码点击包含excel工作表的页面上的文件菜单。

from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
driver.get(r"foo%20Data%20235.xlsx&DefaultItemOpen=3") # dummy link
driver.find_element_by_css_selector('#jewel-button-middle > span').click() # responsible for clicking the file menu
driver.quit()

我不知道如何点击第一个选项,即从弹出菜单中下载快照选项。我无法检查弹出窗口或下拉菜单的元素。我希望下载xlsx文件。

enter image description here

4 个答案:

答案 0 :(得分:2)

使用FireFox更轻松地检查这些元素(关闭下拉列表),打开开发人员工具,然后在选择FireBug工具栏中的选项后用鼠标巡洋舰站在元素上(标记为红色方块)在图片中)。

enter image description here

至于问题,您要查找的定位器是('[id*="DownloadSnapshot"] > span')

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
driver.get(r"foo%20Data%20235.xlsx&DefaultItemOpen=3") # dummy link

wait = WebDriverWait(driver, 10)

wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, '[id*="loadingTitleText"]')))

driver.find_element_by_css_selector('#jewel-button-middle > span').click() # responsible for clicking the file menu

download = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '[id*="DownloadSnapshot"] > span')))
driver.get_screenshot_as_file('fileName')
download.click()

答案 1 :(得分:2)

我们的想法是使用k加载页面,等待加载工作簿的内容,获取下载文件处理程序端点请求的所有必要参数,我们可以使用requests package

完整的解决方案:

PhantomJS

答案 2 :(得分:1)

我观察到excel完全加载,文件菜单没有显示任何选项。所以添加等到excel书加载。

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 time import sleep
from selenium.webdriver.common.action_chains import ActionChains

browser = webdriver.PhantomJS()
browser.maximize_window()
browser.get('http://www.cbe.org.eg/en/EconomicResearch/Publications/_layouts/xlviewer.aspx?id=/MonthlyStatisticaclBulletinDL/External%20Sector%20Data%20235.xlsx&DefaultItemOpen=1#')

wait = WebDriverWait(browser, 10)
element = wait.until(EC.visibility_of_element_located((By.XPATH, "//td[@data-range='B59']")))
element = wait.until(EC.element_to_be_clickable((By.ID, 'jewel-button-middle')))
element.click()
eleDownload = wait.until(EC.element_to_be_clickable((By.XPATH,"//span[text()='Download a Snapshot']")))
eleDownload.click()
sleep(5)
browser.quit()

答案 3 :(得分:0)

通过id / tag找到元素,检查循环中的选项,选择你想要的那个然后点击。