Я пытаюсь получить снимок экрана с указанными ниже URL-адресами с помощью селена, но когда я запускаю этот код, он работает очень-очень-очень медленно.
Самое удивительное, что иногда он работает нормально, но в большинстве случаев он работает очень медленно. так что мне нужна помощь.
Я просто распечатываю скриншоты и URL в HTML-файл. Так что не путайте.
waybackurls401 = {}
waybackurls403 = {}
webarchive_urls403 = []
webarchive_urls403.append('https://web.archive.org/web/2012062112352/http://xx.com/')
webarchive_urls403.append('https://web.archive.org/web/2012062112352/http://xx2.com/')
print "\t[~]Findind of 403 staruscode urls\n"
GEckodriver = 'F:/geckodriver.exe'
firefox_options = Options()
firefox_options .add_argument("-headless")
driver = webdriver.Firefox(executable_path=GEckodriver, firefox_options = firefox_options )
for x in webarchive_urls403:
try:
print "\t", x
driver.get(x)
driver.set_page_load_timeout(6)
imgfilename = x.split('web')[-1]
newfile= imgfilename.replace('/', '.') +'.png'
driver.get_screenshot_as_file(newfile)
value = "<td><img src= file:///F:/master/{0} + width='20%' height= '25%'></td>".format(newfile, x)
key = "<tr><td width=\"50%\">{0}</td><td width=\"50%\"><img src= file:///F:/master/{1} width='30%' height= '20%'><br><a href=\"{2}\">URL</a></td></tr>".format(x, newfile, x)
waybackurls403[key] = value
except TimeoutException as ex:
print "Can't take screenshot because. Timeout."
driver.quit()
Обновлено:-
Согласно комментарию Кирилла, я внес некоторые изменения, чтобы увидеть, где это на самом деле заканчивается.
for x in webarchive_urls403:
print time.time()-start
try:
print "\t", x
print 'test122'
driver.get(x)
print 'test1'
driver.set_page_load_timeout(10)
imgfilename = x.split('web')[-1]
newfile= imgfilename.replace('/', '.') +'.png'
driver.get_screenshot_as_file(newfile)
print 'test2'
value = "<td><img src= file:///F:/AutoRecon-master/{0} + width='20%' height= '25%'></td>".format(newfile, x)
key = "<tr><td width=\"50%\">{0}</td><td width=\"50%\"><img src= file:///F:/AutoRecon-master/{1} width='30%' height= '20%'><br><a href=\"{2}\">URL</a></td></tr>".format(x, newfile, x)
waybackurls403[key] = value
print 'test3'
except TimeoutException as ex:
print ex
driver.quit()
Теперь, как вы можете видеть, я привожу несколько случайных отпечатков, например. print test122
, чтобы увидеть, где он на самом деле застрял.
И я обнаружил, что могу печатать test122
, но не могу печатать test1
после установки driver.get()
, это означает, что код застревает после driver.get()
.
Вот и вся проблема.
интересный выбор поставить firefox geckodriver в переменную CHROMEDRIVER
... Неужели время, когда случается медлительность? например это 1 - загрузка драйвера; 2 - страница загрузки; 3 - сам скриншот; 4 - все вышеперечисленное? Кроме того, будет ли он быстрее, если вы запустите свой тест в интерактивном режиме в среде IDE?
Привет, Кирил, я внес некоторые изменения в свой код. Также замените driver.close()
на driver.quit()
. Теперь вас спрашивают, верен ли этот фрагмент кода или нет?
Привет, @KirilS. Жду вашего ответа. Я дал вам всю информацию. Спасибо
Если вы чего-то хотите, дайте мне знать. Спасибо
если driver.get()
занимает много времени, значит, страница долго загружается. Это может быть ваша сеть, браузер или любое другое количество причин, но не что-то, что вы могли бы исправить непосредственно в своем коде. Кстати, вы устанавливаете driver.set_page_load_timeout(10)
после получения страницы, что слишком поздно, а устанавливаете его до цикла, после загрузки драйвера. Итак, 2 вещи: 1 - Загружается ли он одинаково долго, если загружать вручную? 2 - Я бы приостановил тест и посмотрел на вкладку сети браузера, чтобы увидеть, что занимает много времени (например, разрешение DNS и т. д.)
Blocked: → 0 ms DNS resolution: → 0 ms Connecting: → 0 ms TLS setup: → 0 ms Sending: → 0 ms Waiting: → 3752 ms Receiving: → 3 ms
Это была вся информация.
Привет, я только что заменил драйвер, установленный тайм-аутом, но теперь я не могу делать скриншоты? У меня есть исключения для TIMEOUT. Что это обозначает.?
Исключение для тайм-аута означает, что загрузка страницы заняла более 10 секунд. Теперь ваш другой тест говорит нам, что сама страница должна занимать ~ 4 секунды. (что не очень хорошо, но также не объясняет 10-секундный тайм-аут). Итак, следующий вопрос: что занимает оставшиеся 6+ секунд? Один из вариантов - страница загружает ресурсы (изображения и т. д.). Второй вариант - страница является динамической, и селену сложно определить, когда она была загружена.
Итак, что я бы попробовал дальше, так это загрузить СУЩЕСТВУЮЩИЙ профиль, в котором уже будут кэшированы все ресурсы для этой страницы (stackoverflow.com/questions/50324736/…). И посмотрите, улучшит ли это время. Также стоит понять, почему получение ответа от сервера занимает почти 4 секунды - это долгое время для современной сети.
Привет, @KirilS. У меня новый вопрос, не могли бы вы предложить мне что-нибудь по этому поводу. Вот stackoverflow.com/questions/46642992/…
Всего для четырех URL требуется 166 секунд. Что действительно медленно.