2012-10-17 22 views
3

我瀏覽這個網站:http://ctrlq.org/screenshots/,並發現此頁面上的表格可以給我們給它的任何URL的網頁截圖。蟒蛇機械化代碼來獲取網頁截圖 - 但表單提交NOT WORK

現在,我想用機械化,看看我能穿過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 
>>> 

在一個側面說明,什麼是讓網頁的截圖的最佳方式給定使用python的網址。我不想使用pyqt,因爲我不知道它是如何工作的。任何其他更簡單的替代品,內置模塊或更簡單的模塊。

回答

1

很長一段時間。但是,如果有人需要可以使用此:

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。應該在腳本的相同位置找到它。 下載鏈接壁虎:https://github.com/mozilla/geckodriver/releases。硒這裏

其他有用的文檔:http://selenium-python.readthedocs.io/faq.html 硒具有機械化許多其他功能並不:Selenium Webdriver vs Mechanize

enter image description here

0

您可以在Linux機器上嘗試this會對自己的自動截圖。從問這個問題

+0

我不是一個Linux機器..我使用Python 2.7版的Windows 7。我也很想回復如何使我的上面的腳本與ctrlq.org網站一起工作 – ihightower