Python ждет, пока документ будет готов в браузере селена?

Я сделал Proxy Checker на python в сочетании с селеном, поэтому каждый раз, когда он открывает браузер селена, он использует другой прокси. Но не все прокси работают, и я застрял с загрузкой страницы навсегда, если прокси работает медленно. Итак строки в качестве ключа не работают, потому что страница не загружается. Есть ли в Python функция, позволяющая мне сделать что-то вроде того, что если страница не полностью загружена за 10 секунд, она должна перейти к следующему прокси? Заранее спасибо!

Мой код до сих пор:

# PROXY SETUP FOR THIS PROGRAM
def fly_setup(fly_url):
    fly_options = webdriver.ChromeOptions()
    fly_options.add_experimental_option("prefs", {
        "profile.default_content_setting_values.notifications": 1
    })
    with open("proxies.txt") as fly_proxies:
        lines = fly_proxies.readlines()
        counter = 0

        for proxy in lines:
            fly_options.add_argument('--proxy-server=%s' % proxy.rstrip())
            ad_chrome = webdriver.Chrome(options=fly_options)
            ad_chrome.get(fly_url)
            ad_source = ad_chrome.page_source
            key = 'Vind ik leuk'
            time.sleep(10)
            if ad_chrome.set_page_load_timeout(10):
                print("Page load took to long.. Going to next proxy ")
            else:
                if key not in ad_source:
                    print("Proxy not working! Going to next one ...")
                    ad_chrome.quit()
                    time.sleep(3)
                else:
                    time.sleep(10)
                    ad_chrome.find_element_by_xpath('//*[@id="skip_bu2tton"]').click()
                    counter += 1
                    print("Total views : " + str(counter))
                    print("")
                    ad_chrome.quit()
                    time.sleep(3)

person Youri B.    schedule 20.11.2019    source источник


Ответы (1)


Вы можете установить лимит времени ожидания, используя set_page_load_timeout нравится

driver.set_page_load_timeout(10)

Если страница не может быть загружена в течение 10 секунд, она выдает TimeoutException doc здесь, поймайте его, а затем переключитесь на следующий прокси.

В вашем коде, если я предполагаю, что lines содержит все прокси, вы можете сделать что-то вроде этого:

for proxy in lines:
    fly_options.add_argument('--proxy-server=%s' % proxy.rstrip())
    ad_chrome = webdriver.Chrome(options=fly_options)
    ad_chrome.set_page_load_timeout(10)
    try:
        ad_chrome.get(fly_url)
    except TimeoutException:
        continue

Это решение не всегда работает, особенно когда страница загружает данные с помощью вызовов AJAX. В этом случае сделайте ставку на ожидания селена, дождитесь чего-то, что только представлено/доступно для кликов когда вся страница завершит загрузку, то та же идея, поймать TimeoutException и продолжить цикл.

person Foocli    schedule 20.11.2019
comment
Сэр, вы мой герой. Спасибо за помощь - person Youri B.; 21.11.2019