Этот код Python работает очень медленно?

Я пытаюсь получить снимок экрана с указанными ниже 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().

Вот и вся проблема.

Всего для четырех URL требуется 166 секунд. Что действительно медленно.

Utkarsh Agrawal 29.08.2018 18:36

интересный выбор поставить firefox geckodriver в переменную CHROMEDRIVER ... Неужели время, когда случается медлительность? например это 1 - загрузка драйвера; 2 - страница загрузки; 3 - сам скриншот; 4 - все вышеперечисленное? Кроме того, будет ли он быстрее, если вы запустите свой тест в интерактивном режиме в среде IDE?

Kiril S. 29.08.2018 22:09

Привет, Кирил, я внес некоторые изменения в свой код. Также замените driver.close() на driver.quit(). Теперь вас спрашивают, верен ли этот фрагмент кода или нет?

Utkarsh Agrawal 30.08.2018 05:52

Привет, @KirilS. Жду вашего ответа. Я дал вам всю информацию. Спасибо

Utkarsh Agrawal 30.08.2018 06:11

Если вы чего-то хотите, дайте мне знать. Спасибо

Utkarsh Agrawal 30.08.2018 15:07

если driver.get() занимает много времени, значит, страница долго загружается. Это может быть ваша сеть, браузер или любое другое количество причин, но не что-то, что вы могли бы исправить непосредственно в своем коде. Кстати, вы устанавливаете driver.set_page_load_timeout(10) после получения страницы, что слишком поздно, а устанавливаете его до цикла, после загрузки драйвера. Итак, 2 вещи: 1 - Загружается ли он одинаково долго, если загружать вручную? 2 - Я бы приостановил тест и посмотрел на вкладку сети браузера, чтобы увидеть, что занимает много времени (например, разрешение DNS и т. д.)

Kiril S. 30.08.2018 16:16
Blocked: → 0 ms DNS resolution: → 0 ms Connecting: → 0 ms TLS setup: → 0 ms Sending: → 0 ms Waiting: → 3752 ms Receiving: → 3 ms Это была вся информация.
Utkarsh Agrawal 30.08.2018 16:35

Привет, я только что заменил драйвер, установленный тайм-аутом, но теперь я не могу делать скриншоты? У меня есть исключения для TIMEOUT. Что это обозначает.?

Utkarsh Agrawal 30.08.2018 17:22

Исключение для тайм-аута означает, что загрузка страницы заняла более 10 секунд. Теперь ваш другой тест говорит нам, что сама страница должна занимать ~ 4 секунды. (что не очень хорошо, но также не объясняет 10-секундный тайм-аут). Итак, следующий вопрос: что занимает оставшиеся 6+ секунд? Один из вариантов - страница загружает ресурсы (изображения и т. д.). Второй вариант - страница является динамической, и селену сложно определить, когда она была загружена.

Kiril S. 30.08.2018 18:08

Итак, что я бы попробовал дальше, так это загрузить СУЩЕСТВУЮЩИЙ профиль, в котором уже будут кэшированы все ресурсы для этой страницы (stackoverflow.com/questions/50324736/…). И посмотрите, улучшит ли это время. Также стоит понять, почему получение ответа от сервера занимает почти 4 секунды - это долгое время для современной сети.

Kiril S. 30.08.2018 18:10

Привет, @KirilS. У меня новый вопрос, не могли бы вы предложить мне что-нибудь по этому поводу. Вот stackoverflow.com/questions/46642992/…

Utkarsh Agrawal 20.09.2018 14:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
11
415
0

Другие вопросы по теме