Python等待文件在Selenium浏览器中准备好吗?

问题描述 投票:0回答:1

我已经在python中与硒结合使用了Proxy Checker,因此每次打开selenium浏览器时,它都会使用不同的代理。。但是,并非所有代理都能正常工作,如果代理速度很慢,我将永远永久加载页面。 。因此,字符串作为键不起作用,因为未加载页面。 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)
python selenium browser ready
1个回答
0
投票
您可以使用set_page_load_timeout这样设置超时限制

driver.set_page_load_timeout(10)

如果该页面无法在10秒内加载,则它将抛出TimeoutException doc here,抓住它,然后切换到下一个代理。

在您的代码中,如果我假设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调用加载数据时。在这种情况下,押注硒的waits,等待仅在整个页面完成加载后才显示/可单击的内容,然后再执行相同的操作,接住TimeoutException并继续循环。
© www.soinside.com 2019 - 2024. All rights reserved.