Производительность Selenium Webdriver в зависимости от времени

#python #performance #selenium

#python #Производительность #selenium

Вопрос:

У меня возникли проблемы со временем выполнения selenium webdriver. На самом деле я открываю массив с 10 URL-адресами и очищаю некоторый контент.

С течением времени, когда selenium открывает четвертый URL-адрес, он становится чрезвычайно медленным … если я позволю задаче продолжаться, она не может быть завершена, python прерывает процесс из-за превышения времени выполнения.

Представьте, что первая очистка URL-адреса занимает 1 минуту, вторая — 1-2 минуты, третья — 4 минуты, …, затем она прерывается.

Мне нужно какое-то решение этой проблемы, я использую ipython notebook 2.7.

PS: Как вы думаете, может ли помочь открытие URL-адреса на разных вкладках?

Редактировать: вот как я создаю браузер:

 chromeOptions = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images":2,
        "profile.default_content_setting_values.notifications" : 2,}   
chromeOptions.add_experimental_option("prefs",prefs)
chromeOptions.add_argument("--window-position=0,0")
browser = webdriver.Chrome(chrome_options=chromeOptions)
  

Эта задача выполняется в каждом URL-адресе массива:

 browser.get(url)

lastHeight = browser.execute_script("return document.body.scrollHeight")
while True:
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)
    newHeight = browser.execute_script("return document.body.scrollHeight")
    if newHeight == lastHeight:
        break
    lastHeight = newHeight

start = 'Por '
end = ' com'

html_source = browser.page_source
soup = BeautifulSoup(html_source)

cl = soup.find_all('div', attrs={'class': 'cl'})
names = [None] * len(cl)
for i in range(len(cl)):
    try: names[i] = re.search('%s(.*)%s' % (start, end), cl[i].text).group(1)
    except: continue

photosof = list(set(names))
  

Ответ №1:

К сожалению, производительность Selenium сильно зависит от времени, она очень быстро снижается. Единственным решением, которое я нашел, было закрыть и снова открыть драйвер.