我正在尝试使用Selenium,python和firefox将数据输入到网站的输入框中,并从文本框的下拉菜单中选择,但无法这样做。以前它只是一个文本框,但网站已经改变了。
输入文本框ID为“searchTerm”。该站点允许输入科学名称(或科学名称的一部分),然后从选项中进行选择。例如,如果您在文本框中输入“Acipenser brevirostrum”,它将为您提供单击选项。
不幸的是,不知道如何编写代码。任何帮助,将不胜感激。到目前为止,我有这个。
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.support.ui import Select
binary = FirefoxBinary(r'C:/Program Files (x86)/Mozilla Firefox/firefox.exe')
driver = webdriver.Firefox(firefox_binary=binary)
driver.get("http://ecos.fws.gov/ecp")
SciName = driver.find_element_by_id('searchTerm')
SciName.send_keys(names)
SciName.send_keys(Keys.RETURN)
最后三行用于工作,但现在它既是带有下拉菜单的输入框,也是失败的。
任何帮助都将不胜感激。
答案 0 :(得分:0)
在搜索框中输入名称(id - searchTerm)后,使用显式等待检查div(class - autocomplete-suggestions)的可见性。这包含网站引发的建议。然后你必须找到适合你的选项。试试这个xpath并单击元素。您应该使用findelements
选项,因为您的文字可能与任何内容都不匹配,您将收到错误。
"//div[@class='autocomplete-suggestion'][contains(.,'Acipenser brevirostrum')]"
如果在键入搜索文本时遇到自动完成下拉列表时遇到问题,请一次发送一个字符,文本间隔较小,以触发调用。
答案 1 :(得分:0)
你可以简单地使用driver.find_element_by_name
,因为html是:
<input type="text" class="form-control" name="query" placeholder="Search ECOS">
此代码可以使用:
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://ecos.fws.gov/ecp/")
driver.find_element_by_name("query").click()
driver.find_element_by_name("query").send_keys("test")
driver.find_element_by_css_selector("button.btn.btn-default").click()