如何使用selenium迭代地将字符串列表输入到搜索框中?

时间:2017-04-05 17:56:25

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver

假设我有一个术语列表:

a_lis = ['cat', 'dog', 'fish', 'worm', ..., 'ferret']

另外,我的网站有一个搜索框:

enter image description here

如何将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)")

尽管如此,它没有用。

2 个答案:

答案 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