假设我有一个术语列表:
a_lis = ['cat', 'dog', 'fish', 'worm', ..., 'ferret']
另外,我的网站有一个搜索框:
如何将a_lis
的每个元素传递并搜索到搜索框中?看了docs之后我尝试了这个:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
for e in a_lis:
driver.get("https:www.example.com")
inputElement = driver.find_element_by_id("searchbox")
inputElement.send_keys(e)
inputElement.send_keys(Keys.ENTER)
driver.back()
但是,它不起作用。因为它只是逐个传递a_lis
的所有字符串元素而不进行任何搜索。因此,我如何逐个传递每个元素,然后将其搜索到搜索框中?换句话说,我的主要目标是将a_lis中的每个字符串分别搜索到搜索框中。
更新
我试着在for循环中做:
driver.execute_script("window.history.go(-1)")
尽管如此,它没有用。
答案 0 :(得分:2)
我做了这个例子供你参考。我进入堆栈溢出,同步搜索每个标签,然后关闭驱动程序。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
driver = webdriver.Firefox()
driver.get("http://stackoverflow.com/")
for query in ["java","python"]:
driver.find_element_by_tag_name("input").send_keys(query)
driver.find_element_by_tag_name("input").send_keys(Keys.ENTER)
# alternatively, find the search button element and click it.
# additional functionality here
sleep(5)
print "Query link: ",driver.current_url
driver.back()
sleep(1)
driver.quit()
driver.back()
并再次找到搜索栏元素driver.find_element
以避免陈旧的元素引用错误。答案 1 :(得分:1)
第inputElement.send_keys(Keys.ENTER)
行未点击搜索按钮,因此它会继续循环并输入列表中的下一个字符串。
不要发送回车键,而是尝试在搜索按钮上单击,例如
driver.find_element_by_id("ID OF SEARCH BUTTON GOES HERE").click()
然后,当您完成此输入后,在循环的最后一行使用driver.back()
返回上一页,这将带您进入搜索输入的页面。
所以你的代码看起来像这样:
driver.get("https:www.example.com")
for e in a_lis:
inputElement = driver.find_element_by_id("searchbox")
inputElement.clear()
inputElement.send_keys(e)
driver.find_element_by_id("ID OF SEARCH BUTTON GOES HERE").click()
# do something here for the new page
driver.back() #takes you back to search another string