我刚接触python中的selenium (以及python的所有web界面应用程序),在目前的实习工作中,我有一项任务要完成。
我的脚本成功地导航到一个在线数据库,并从我的数据表中输入信息,但随后有问题的网页需要30秒到几分钟的时间来计算输出。
如何指示python每30秒重新检查一次页面,直到出现输出,以便我可以解析它以获取所需的数据?例如,我可以从哪些函数开始?
这将是一个循环的一部分,重复超过200个条目,如果我成功了,还会有数百个,所以值得我花时间将其自动化。
谢谢
发布于 2018-07-27 06:59:46
您应该使用G_M和Sam Holloway指出的Seleniums。我最常用的一种是expected_conditions
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
它将一直等到有一个id为"myDynamicElement“的元素,然后执行try块,该块应该包含您剩余的工作。我更喜欢使用类By.XPATH,但是如果您将By.XPATH与presence_of_element_located方法一起使用,则添加另一个(),因此它将是this answer中提到的所需的元组
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[contains(text(),"Some text")]')
driver.find_element(By.XPATH, '//div[@id="id1"]')
driver.find_elements(By.XPATH, '//a')
查找(对我而言)元素的XPATH的最简单方法是在chrome (F12)中转到开发人员模式,按ctrl+F键,并使用鼠标和inspect,尝试组成适当的XPATH,它将足够具体,只找到预期的元素,或者尽可能少的元素。
所有示例都来自(或基于) great selenium documentation。
发布于 2018-07-27 04:14:31
如果您只想分隔检查,则time.sleep()
函数应该可以工作。
然而,正如G_M的评论所说,你应该研究一下Selenium waits。想想看:页面上是否有一个元素将指示结果已加载?如果是,请使用Selenium等待该元素,以确保您的程序只会在加载结果之前暂停,而不会在加载后浪费任何时间。
https://stackoverflow.com/questions/51546819
复制相似问题