Не могу позволить скрипту запускаться через равные промежутки времени - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь изменить следующий сценарий таким образом, чтобы он запускался через равные промежутки времени. Я знаю, как делать то же самое с помощью запросов. Однако в случае с селеном я застрял.

Я пробовал с

import time
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

link = 'https://stackoverflow.com/questions/tagged/web-scraping'

def get_content(link):
    driver.get(link)
    for item in WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,".question-summary"))):
        title = item.find_element_by_css_selector(".question-hyperlink").text
        link = item.find_element_by_css_selector(".question-hyperlink").get_attribute("href")
        print(title,link)
    driver.quit()

if __name__ == '__main__':
    driver = webdriver.Chrome()
    while True:
        get_content(link)
        time.sleep(20)

Как я могу заставить скрипт запускаться через равные промежутки времени?

Если я буду работать как есть, то при второй попытке я получу следующую ошибку:

    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=51356): Max retries exceeded with url: /session/41bae2407c029ad2879619c3e65552da/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x02504850>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))

1 Ответ

1 голос
/ 08 мая 2020

Fn: get_content; использует driver.quit.

Итак, в конце концов он закрывает драйвер. Это означает, что при следующем запуске вам понадобится новый экземпляр веб-драйвера.

def get_content(link, driver):
    driver.get(link)
    ... .. .
    driver.quit()

if __name__ == '__main__':
    while True:
        driver = webdriver.Chrome()
        get_content(link, driver)
        time.sleep(20)
...