python自動提交表單
如果是要提交表單內容給 伺服器的 python 處理,那麼只需要在表單 <form> 裡面的 action 填寫服務端的處理路由就可以了。或者用 <a> 指向伺服器路由get querystring。前端方面不需要python啊。
前端的提交交互動作,都是由 javascript 處理就可以了
遠程登錄ssh之後,那個web頁面可以通過url訪問還是伺服器上可以直接讀取的文件?
如果是前者,就等於python爬蟲了,使用 uillib urllib2訪問 web頁面的 url 得到響應,然後解析,再使用剛才兩個標准模塊裡面的.大概事例代碼:
import urllib, urllib2
res = urllib2.urlopen("http://your.web.com")
html = res.read()
# 解析 html ,讀取 你要提交的內容
# 提交到新的連接
# get
params = urllib.urlencode({'programe': 'python', 'age': 12})
f = urllib.urlopen("http://your.web.com?%s" % params)
# post
params = urllib.urlencode({'programe': 'python', 'age': 12})
f = urllib.urlopen("http://your.web.com", params)
直接讀取伺服器上的web文件內容解析提交的內容,後面的過程也是一樣。
另外,python 有個 requests 的庫,封裝得更好,使用方便
⑵ python爬蟲簡單問題,HTML對象的定位問題
這里有各種策略用於定位網頁中的元素(locate elements),你可以選擇最適合的方案,Selenium提供了一下方法來定義一個頁面中的元素:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
- 下面是查找多個元素(這些方法將返回一個列表):
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
<html>
<body>
<formid="loginForm">
<inputname="username"type="text"/>
<inputname="password"type="password"/>
<inputname="continue"type="submit"value="Login"/>
<inputname="continue"type="button"value="Clear"/>
</form>
</body>
<html>
- 定位username元素的方法如下:
username=driver.find_element_by_xpath("//form[input/@name='username']")
username=driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
username=driver.find_element_by_xpath("//input[@name='username']")
- [1] 第一個form元素通過一個input子元素,name屬性和值為username實現
- [2] 通過id=loginForm值的form元素找到第一個input子元素
- [3] 屬性名為name且值為username的第一個input元素
clear 清除元素的內容
send_keys 模擬按鍵輸入
click 點擊元素
submit 提交表單
fromseleniumimportwebdriver
fromselenium.webdriver.common.keysimportKeys
importtime
#Login163email
driver=webdriver.Firefox()
driver.get("")
elem_user=driver.find_element_by_name("username")
elem_user.clear
elem_user.send_keys("15201615157")
elem_pwd=driver.find_element_by_name("password")
elem_pwd.clear
elem_pwd.send_keys("******")
elem_pwd.send_keys(Keys.RETURN)
#driver.find_element_by_id("loginBtn").click()
#driver.find_element_by_id("loginBtn").submit()
time.sleep(5)
assert""indriver.title
driver.close()
driver.quit()
- 首先通過name定位用戶名和密碼,再調用方法clear()清除輸入框默認內容,如「請輸入密碼」等提示,通過send_keys("**")輸入正確的用戶名和密碼,最後通過click()點擊登錄按鈕或send_keys(Keys.RETURN)相當於回車登錄,submit()提交表單。
- PS:如果需要輸入中文,防止編碼錯誤使用send_keys(u"中文用戶名")。
size 獲取元素的尺寸
text 獲取元素的文本
get_attribute(name) 獲取屬性值
location 獲取元素坐標,先找到要獲取的元素,再調用該方法
page_source 返回頁面源碼
driver.title 返回頁面標題
current_url 獲取當前頁面的URL
is_displayed() 設置該元素是否可見
is_enabled() 判斷元素是否被使用
is_selected() 判斷元素是否被選中
tag_name 返回元素的tagName
除了上面給出的公共方法,這里也有兩個在頁面對象定位器有用的私有方法。這兩個私有方法是find_element和find_elements。
常用方法是通過xpath相對路徑進行定位,同時CSS也是比較好的方法。舉例:
[html]view plain
[python]view plain
二. 操作元素方法
在講述完定位對象(locate elements)之後我們需要對該已定位對象進行操作,通常所有的操作與頁面交互都將通過WebElement介面,常見的操作元素方法如下:
舉例自動訪問FireFox瀏覽器自動登錄163郵箱。
[python]view plain
三. WebElement介面獲取值
通過WebElement介面可以獲取常用的值,這些值同樣非常重要。
⑶ python http requests 怎麼實現模擬登錄,提交表單
以下實例是一個完整的代碼,實現了從博客獲取內容發布至網路,分別實踐抓取博客內容、模擬登錄、表單提交這幾步;
#注意,以下程序是一個完全程序,如果只需要實現模擬登錄,提交表單,刪除抓取部分即可,相關的代碼已經清楚標注,可以根據自己實際情況修改。
代碼如下:
# -*- coding: utf-8 -*-
import re
import urllib
import urllib2
import cookielib
#第一步,獲取博客標題和正文 ,「IP」可以改為實際地址;
url = "IP"
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
content = re.findall('(?<=blogstory">).*(?=<p class="right artical)', html, re.S)
content = re.findall('<script.*>.*</script>(.*)', content[0], re.S)
title = re.findall('(?<=<title>)(.*)-.* - CSDN.*(?=</title>)', html, re.S)
#根據文章獲取內容新建表單值
blog = {'spBlogTitle': title[0].decode('utf-8').encode('gbk'), #文章標題
'spBlogText': content[0].decode('utf-8').encode('gbk'),#文章內容
'ct': "1",
'cm': "1"}
del content
del title
#第二步,模擬登錄網路;
cj = cookielib.CookieJar()
#登陸網路的用戶名和密碼
post_data = urllib.urlencode({'username': '[username]', 'password': '[password]', 'pwd': '1'})
#登錄地址路徑
path = 'https://passport..com/?login'
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Opera/9.23')]
urllib2.install_opener(opener)
req = urllib2.Request(path, post_data)
conn = urllib2.urlopen(req)
#獲取網路登陸認證令牌
bd = urllib2.urlopen(urllib2.Request('http://hi..com/[username]/creat/blog')).read()
bd = re.findall('(?<=bdstoken\" value=\").*(?=ct)', bd, re.S)
blog['bdstoken'] = bd[0][:32]
#設置分類名
blog['spBlogCatName'] = 'php'
#第四步,比較表單,提交表單;req2 = urllib2.Request('http://hi..com/[username]/commit', urllib.urlencode(blog))
#最後,查看錶單提交後返回內容,檢驗;
print urllib2.urlopen(req2).read()
#注意:將[username]/[password]替換為自己真實用戶名和密碼
⑷ 怎麼實現表單自動提交 不用手動按submint
可以使用AJAX,文本改變或者是文本框失去焦點的時候就提交數據。可以每填寫一條數據,提交一次。
如果不用AJAX,也可以用JS代碼,在某個文本框失去焦點的時候,觸發提交表單的代碼。這種就是不好判斷的了。
⑸ python3中,使用get提交表單時怎樣使用header
defopenUrl(url):
importurllib2
url='http://'+url
req=urllib2.Request(url)
//根據你自己的需要設置header,add_header方法中需要兩個參數,key和value的鍵值對
req.add_header('User-agent','Mozilla/5.0(WindowsNT6.2;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/33.0.1707.0Safari/537.36')
response=urllib2.urlopen(req)
the_page=response.read()
printthe_page
printresponse.geturl()
printresponse.info()
printresponse.headers
openUrl('xxx.xxx.xxx')
⑹ 怎麼用python抓取網頁並實現一些提交操作
首先我們找到登錄的元素,在輸入賬號處選中–>右鍵–>檢查
然後直接查詢網頁源代碼去找到上面的部分,根據標簽來觀察提交的表單參數,這里強調一下:
form標簽和form標簽下的input標簽非常重要,form標簽中的action屬性代表請求的URL,input標簽下的name屬性代表提交參數的KEY。
代碼參考如下:
import requests
url="網址" #action屬性
params={
"source":"index_nav", #input標簽下的name
"form_email":"xxxxxx", #input標簽下的name
"form_password":"xxxxxx" #input標簽下的name
}
html=requests.post(url,data=params)
print(html.text)
運行後發現已登錄賬號,相當於一個提交登陸的操作
⑺ 我打算用python去處理html的form表單,該怎麼實現
運用 web.py 框架
例如 index頁面有兩個輸入框
<form action='/index',method='post'>
<input type="text" name="name" id="name" />
<input type="text" name="pwd" id="pwd" />
</form>
那麼 在python 中
class index:
def GET(self, name):
inputall =web.input(name=None,pwd=None)
name= inputall.name
pwd= inputall.pwd
print print name ,pwd
def POST(self, name):
inputall =web.input(name=None,pwd=None)
name= inputall.name
pwd= inputall.pwd
print print name ,pwd
就得到了頁面提交的 name 和pwd
⑻ 如何在 Python 中模擬 post 表單來上傳文件
在機器上安裝了Python的setuptools工具,可以通過下面的命令來安裝 poster:
easy_install poster
裝完之後,安裝下面代碼就可以實現post表單上傳文件了:
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib2
# 在 urllib2 上注冊 http 流處理句柄
register_openers()
# 開始對文件 "DSC0001.jpg" 的 multiart/form-data 編碼
# "image1" 是參數的名字,一般通過 HTML 中的 <input> 標簽的 name 參數設置
# headers 包含必須的 Content-Type 和 Content-Length
# datagen 是一個生成器對象,返回編碼過後的參數
datagen, headers = multipart_encode({"image1": open("DSC0001.jpg", "rb")})
# 創建請求對象(localhost伺服器IP地址,5000伺服器埠)
request = urllib2.Request("http://localhost:5000/upload_image", datagen, headers)
# 實際執行請求並取得返回
print urllib2.urlopen(request).read()
⑼ python get提交表單問題
GET方式請求http://nbsw.yundasys.com:12101/nbsw/go.php?wen=1200964701685&jmm=null
response中獲得http://qz.yundasys.com:18090/ws/kjcx/cxend.jsp?wen=2bbd581b1263237ea6bdcecba6&jmm=null
直接POST方式請求步驟1獲得的地址http://qz.yundasys.com:18090/ws/kjcx/cxend.jsp?wen=2bbd581b1263237ea6bdcecba6&jmm=null
從步驟2中的response里獲得http://qz.yundasys.com:18090/ws/qry1.jsp?wen=1200964701685&key=
GET方式請求http://qz.yundasys.com:18090/ws/qry1.jsp?wen=1200964701685&key=
⑽ python爬蟲能做什麼
Python是一門非常適合開發網路爬蟲的編程語言,相比於其他靜態編程語言,Python抓取網頁文檔的介面更簡潔;相比於其他動態腳本語言,Python的urllib2包提供了較為完整的訪問網頁文檔的API。此外,python中有優秀的第三方包可以高效實現網頁抓取,並可用極短的代碼完成網頁的標簽過濾功能。
Python爬蟲架構組成:
1. URL管理器:管理待爬取的url集合和已爬取的url集合,傳送待爬取的url給網頁下載器;
2. 網頁下載器:爬取url對應的網頁,存儲成字元串,傳送給網頁解析器;
3. 網頁解析器:解析出有價值的數據,存儲下來,同時補充url到URL管理器。
Python爬蟲工作原理:
Python爬蟲通過URL管理器,判斷是否有待爬URL,如果有待爬URL,通過調度器進行傳遞給下載器,下載URL內容,並通過調度器傳送給解析器,解析URL內容,並將價值數據和新URL列表通過調度器傳遞給應用程序,並輸出價值信息的過程。
爬蟲可以做什麼?
你可以用爬蟲爬圖片,爬取視頻等等你想要爬取的數據,只要你能通過瀏覽器訪問的數據都可以通過爬蟲獲取。
Python爬蟲常用框架有:
grab:網路爬蟲框架;
scrapy:網路爬蟲框架,不支持Python3;
pyspider:一個強大的爬蟲系統;
cola:一個分布式爬蟲框架;
portia:基於Scrapy的可視化爬蟲;
restkit:Python的HTTP資源工具包。它可以讓你輕松地訪問HTTP資源,並圍繞它建立的對象。
demiurge:基於PyQuery的爬蟲微框架。