код механизма Python для получения снимка экрана веб-страницы, но отправка формы НЕ РАБОТАЕТ

Я просмотрел этот сайт: http://ctrlq.org/screenshots/ и обнаружил, что форма на этом страница может предоставить скриншот веб-страницы любого URL-адреса, который мы ей даем.

Теперь я хочу попробовать то же самое, используя механизацию, чтобы увидеть, смогу ли я добиться этого, отправив форму через код Python.

Если отправка формы прошла успешно, я должен получить

Поздравляем, скриншот http://www.gnu.org готов. Скачать изображение

Но моя отправка не привела к ожидаемому результату. Где я ошибаюсь?

Вот код:

import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import re


# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
#br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

# The site we will navigate into, handling it's session
br.open('http://ctrlq.org/screenshots/')

html = br.response().read()
soup = BeautifulSoup(html)

hidden_str = str(soup.find('input', { "name" : "labnol" }))
m = re.search('value="(.*?)"', hidden_str)
hidden_val = m.group(1)


print hidden_val


br.select_form(nr=0)

br['url'] = "http%3A%2F%2Fwww.gnu.org"

for form in br.forms():
    print '---------------'
    print form

br.submit()

html2 = br.response().read()


##print html2

print 'if congrat.. exists in result'
print 'congrat' in html2.lower()

И вот результат:

>>> ================================ RESTART ================================
>>> 
2f043008c3ecfa0a86ea8a9ed8a19916
---------------
<POST http://ctrlq.org/screenshots/ application/x-www-form-urlencoded
  <TextControl(url=http%3A%2F%2Fwww.gnu.org)>
  <SubmitButtonControl(<None>=) (readonly)>
  <HiddenControl(labnol=2f043008c3ecfa0a86ea8a9ed8a19916) (readonly)>>

False
>>> 

Кстати, как лучше всего сделать снимок экрана веб-страницы с заданным URL-адресом с помощью python. Я не хочу использовать pyqt, так как понятия не имею, как это работает. Любые другие более простые альтернативы со встроенными модулями или более простые модули.


person ihightower    schedule 17.10.2012    source источник


Ответы (2)


Давно не задавал вопрос. Но если кому-то нужно, может использовать это:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.python.org/')
driver.save_screenshot('screenshot.png')
driver.quit()

Вы должны скачать пакет селена отсюда: https://pypi.python.org/pypi/selenium Или запустить команду

pip установить селен

Примечание. Вам также потребуется geckodriver.exe. Он должен находиться в том же месте, что и ваш скрипт. Ссылка для скачивания gecko: https://github.com/mozilla/geckodriver/releases .

Другая полезная документация по селену здесь: http://selenium-python.readthedocs.io/faq.html Selenium имеет много других функций, которых нет у механизированных: Selenium Webdriver и Mechanize

введите здесь описание изображения

person Adrian Stanculescu    schedule 07.03.2017

Вы можете попробовать это на своем компьютере с Linux, чтобы самостоятельно создавать автоматические скриншоты.

person Relaed    schedule 24.10.2012
comment
я не Linux-машина .. я на Windows 7, используя python 2.7. также мне очень хотелось бы получить ответ о том, как заставить мой вышеприведенный скрипт работать с сайтом ctrlq.org. - person ihightower; 31.10.2012