Time.sleep() on ChromeDriver



我正在使用ChromeDriver使用Python进行一些web抓取。我的代码使用browser.find_element_by_xpath,但我必须在点击/输入之间包含time.sleep(3),因为我需要等待网页加载才能执行下一行代码。

想知道是否有人知道最好的方法?也许有一个功能可以在浏览器加载时立即自动执行下一行,而不是等待任意的秒数?

谢谢!

使用expected_conditions尝试explicit wait,如下所示。

进口需求:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

然后,您可以等待元素出现,然后再进行交互。

# waiting for max of 30 seconds, if element present before that it will go on to the next line.
ele = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,"xpath_goes_here")))
ele.click() # or what ever the operation like .send_keys()

这样,应用程序将动态地等待,直到元素出现为止。如果需要,根据您的应用程序将时间从30秒更新。

此外,在检查元素存在时,您可以使用不同的定位策略,例如:By.CSS_SELECTOR/By.ID/By.CLASS_NAME

我已经为这种情况使用了一个函数,该函数为脚本添加了健壮性。例如,通过xpath查找元素:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions as EC

def findXpath(xpath,driver):
actionDone = False
count = 0
while not actionDone:
if count == 3:
raise Exception("Cannot found element %s after retrying 3 times.n"%xpath)
break
try:
element = WebDriverWait(driver, waitTime).until(
EC.presence_of_element_located((By.XPATH, xpath)))
actionDone = True
except:
count += 1
sleep(random.randint(1,5)*0.1)
return element 

让我知道这对你有用!

相关内容

  • 没有找到相关文章