从下拉列表中刮取数值

问题描述 投票:0回答:1

我正试图从网站的下拉菜单中搜索公司列表。https:/www.goodjobsfirst.orgviolation-tracker ,下拉的是母公司的。

我正在运行以下代码

from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser =  webdriver.Chrome(executable_path=r"C:\webdrivers\chromedriver.exe")
url = ('https://www.goodjobsfirst.org/violation-tracker')
browser.get(url)
browser.maximize_window()  
element = WebDriverWait(browser, 20).until(Select(browser.find_element_by_id("edit-field-violation-parent-value")))

browser.quit()

但我得到的错误是

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="edit-field-violation-parent-value"]"}
  (Session info: chrome=83.0.4103.61)

我检查了不同的时间,edit-field-violation...确实是ID。我也尝试使用Xpath和其他选择器来获取它,但没有成功。我到底错在哪里?我怎样才能在下拉菜单中得到所有公司的列表?

谢谢!

python selenium dropdown
1个回答
0
投票

这个元素是在 <iframe> 和Selenium踩着框架像分开的内容页,你必须使用 browser.switch_to.frame(...) 来访问它。

from selenium import webdriver

browser = webdriver.Chrome(executable_path=r"C:\webdrivers\chromedriver.exe")
#browser = webdriver.Firefox()

url = ('https://www.goodjobsfirst.org/violation-tracker')
browser.get(url)
browser.maximize_window()

frame = browser.find_element_by_tag_name("iframe")
print('frame:', frame)

browser.switch_to.frame(frame)

element = browser.find_element_by_id("edit-field-violation-parent-value")
print('element:', element)

select = Select(select)
print('options number:', len(select.options))

for number, item in enumerate(select.options, 1):
    print(number, item.text)

# go back to main content
#browser.switch_to.default_content()

browser.quit()
© www.soinside.com 2019 - 2024. All rights reserved.