我正在尝试使用 selenium 定位并单击网页上的元素。网页是https://www.innisfil.ca/使用此网页上的内置搜索栏,并通过单击下一步按钮遍历搜索结果。
下一个按钮存储在类为“search-next”的 span 元素中,如以下网站的一段 html 代码所示。
<font class="search-nav" face="arial,verdana,geneva,lucida" size="-1">
<span class="search-prev"><< Prev</span>
<span class="search-prevnext-sep"> |  </span>
<span class="search-next">
<a class="search-nav" dir="ltr" href="https://search.freefind.com/find.html?pageid=r&id=47055328&query=environmental+assessment&sbv=j2&ics=1&fr=10" target="">
<b>Next</b>
>>
</a>
</span>
</font>
这里是我编写的工作示例代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
url ='http://www.town.innisfil.on.ca'
munip = "t"
bar_name = 'query'
search_term = "environmental assessment"
next_button_name = "search-next"
driver = webdriver.Chrome()
driver.get(url)
search_bar = driver.find_element_by_name(bar_name)
search_bar.send_keys("house")
search_bar.send_keys(Keys.RETURN)
try:
span = driver.find_element_by_class_name(next_button_name)
span.find_element_by_tag_name("a").click()
except NoSuchElementException:
print("Can't find next button")
我的问题是为什么我可以在 html 的屏幕上看到按钮,但 selenium 似乎找不到它?我不太熟悉 html 的来龙去脉,这可能是非常明显的事情。在此先感谢您的帮助。
最佳答案
文本 house
的搜索结果显示在 iframe
中,id
为 ffse-overlay-ifr
。所以你必须先切换到 ffse-overlay-ifr
frame
。这是您自己的代码,经过一些简单的修改,可以在我的 Windows 8
系统上完美运行:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
url ='http://www.town.innisfil.on.ca'
munip = "t"
bar_name = 'query'
search_term = "environmental assessment"
next_button_name = "search-next"
driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.maximize_window()
driver.get(url)
search_bar = driver.find_element_by_name("query")
search_bar.send_keys("house")
search_bar.send_keys(Keys.RETURN)
driver.switch_to_frame("ffse-overlay")
driver.find_element_by_xpath("//a[@class='search-nav']").click()
print("Next Button Clicked")
控制台输出:
Next Button Clicked
关于html - python 3 Selenium : can't find element visible on screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46098382/