【问题标题】:How to iterabily enter a list of strings into a search box with selenium?如何使用 selenium 将字符串列表迭代输入到搜索框中?
【发布时间】:2017-04-05 17:56:25
【问题描述】:

假设我有一个术语列表:

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)")

然而,它没有工作。

【问题讨论】:

  • 您的意思是要它单独搜索a_lis 中的每个字符串?
  • 只需将driver.get("https:www.example.com") 放在循环的开头即可。
  • 那么它输入一个字符串并正确输入了吗?我的意思是,回车键是否点击了搜索按钮并执行了它应该执行的操作?
  • 不,它是一次输入所有字符串,这是错误的。它也没有返回以搜索列表中的下一个词@JayeshDoolani
  • 啊,我明白了。所以回车键没有按下搜索按钮,因此它继续循环并输入下一个要输入的字符串。不要发送Keys.ENTER,而是手动点击搜索按钮

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


【解决方案1】:

我做了这个例子供你参考。我去堆栈溢出,同步搜索每个标签,然后关闭驱动。

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,以避免出现过时元素引用错误。

【讨论】:

  • 仔细检查搜索栏的id是searchbox
  • 如何获取当前查询链接?。我尝试在driver.back() 之后使用current_url。但是,它不会打印当前的查询链接。
  • 增加睡眠时间,或等待页面完成加载:sleep(n) n, is some number such that after n seconds page loaded 然后打印 url print "Query link: ",driver.current_url
【解决方案2】:

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

【讨论】:

  • 谢谢,但我得到了:NoSuchElementException: Message: Unable to locate element: [id="searchbox"]
  • 嗯,你要确保搜索框的id是正确的。此错误表明网页上没有 id="searchbox" 的元素。如果搜索框没有唯一的 id,请使用 xPath
  • 请注意,您在代码中使用了 javascript cmets,但答案很好。
  • 我一直这样做
猜你喜欢
  • 1970-01-01
  • 2018-08-02
  • 2018-08-18
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 2021-10-22
  • 2014-08-30
相关资源
最近更新 更多