首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Selenium选择自动完成列表-在访问另一个列表之前必须关闭一个列表

使用Selenium选择自动完成列表-在访问另一个列表之前必须关闭一个列表
EN

Stack Overflow用户
提问于 2020-04-18 15:52:20
回答 1查看 24关注 0票数 1

我正在尝试用Selenium编写一个Python脚本来自动完成表单。

有几个字段具有自动完成功能。我可以填写这些表格并选择,如下所示:

代码语言:javascript
运行
复制
field1 = driver.find_element_by_id("field-1")
field1.send_keys("input")
driver.find_element_by_xpath("//ul[1]/li[1]") #this clicks on the first autocomplete option

这可以很好地工作。

然而,为了继续下一个表单,我必须首先模拟点击,通常会延迟5-8秒:

代码语言:javascript
运行
复制
driver.find_element_by_xpath("//body").click()
time.sleep(delay)

延迟通常设置为8秒-任何更短的时间似乎都不起作用。

有没有更有效的方法来避免使用定时延迟?

我想我可能需要退出表单/让Selenium确认自动完成已被选中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-18 17:05:53

您可以使用WebDriverWait等待元素在新表单中定位。这样,您就不必显式地声明延迟功能,一旦出现新表单,代码就会恢复执行。

示例代码

代码语言:javascript
运行
复制
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

browser = webdriver.Firefox()
browser.get("url")
delay = 3 # seconds
driver.find_element_by_xpath("//body").click()
try:
    myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
    print "new form is ready!"
    # add your code here
except TimeoutException:
    print "Loading took too much time!"

您也可以使用任何其他类型的方法来查找定位器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61285866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档