Python在selenium浏览器中等待文档准备就绪



我在python中结合selenium制作了一个代理检查器,所以每次打开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)

您可以像一样使用set_page_load_timeout设置超时限制

driver.set_page_load_timeout(10)

如果页面无法在10秒内加载,那么它将在此处抛出TimeoutException文档,捕获它,然后切换到下一个代理。

在您的代码中,如果我假设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调用加载数据时。在这种情况下,押注于selenium的等待,等待只有在整个页面加载完成时才显示/可点击的东西,然后同样的想法,捕获TimeoutException并继续循环。

最新更新