我正在學習scrapy,並且遇到了試圖提交由javascript控制的表單的障礙。Scrapy並提交一個JavaScript表格
我試過用堆棧溢出(包括Selenium)在這裏發現的一些東西進行實驗,但沒有運氣(出於多種原因)。
我需要刮的頁面是... http://agmarknet.nic.in/
...和做商品搜索。當我檢查元素時,它看起來有一個「m」形式,提交的「cmm」需要商品價值。
<form name="m" method="post">
(...)
<input type="text" name="cmm" onchange="return validateName(document.m.cmm.value);" size="13">
(...)
<input type="button" value="Go" name="Go3" style="color: #000080; font-size: 8pt; font-family: Arial; font-weight: bold" onclick="search1();"></td>
任何建議感激地接受!
更新: 我試過用硒,但它沒有找到或填充該字段。我也不會介意能夠做到這一點沒有彈出一個Firefox窗口...
CrawlSpider.__init__(self)
self.verificationErrors = []
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://agmarknet.nic.in/")
time.sleep(4)
elem = driver.find_element_by_name("cmm")
elem.send_keys("banana")
time.sleep(5)
elem.send_keys(Keys.RETURN)
driver.close()
UPDATE:
我也試過以下的各種迭代,但沒有運氣。當我從網頁提交搜索時,fiddler2告訴我它正在傳輸字符串「cmm = banana & mkt = & search =」...但是當我使用下面的代碼時,提琴手告訴我沒有任何內容正在發佈。 ..
class Agmarknet(Spider):
name = "agmarknet"
start_urls = ["http://agmarknet.nic.in/SearchCmmMkt.asp"]
def parse(self, response):
return [FormRequest.from_response(
response,
#formname = "cmm1",
formdata={
'method':'post',
'cmm': 'banana',
'mkt': '',
'search':''},
callback=self.after_search)]
def after_search(self):
print response.body
產量從上圖:
{'download_timeout': 180, 'download_latency': 13.44700002670288, 'proxy': 'http://127.0.0.1:8888', 'download_slot': 'agmarknet.nic.in'}
Spider error processing <GET http://agmarknet.nic.in/SearchCmmMkt.asp>
Traceback (most recent call last):
File "Z:\WinPython-32bit-2.7.6.2\python-2.7.6\lib\site-packages\twisted\internet\base.py", line 1201, in mainLoop
self.runUntilCurrent()
File "Z:\WinPython-32bit-2.7.6.2\python-2.7.6\lib\site-packages\twisted\internet\base.py", line 824, in runUntilCurrent
call.func(*call.args, **call.kw)
File "Z:\WinPython-32bit-2.7.6.2\python-2.7.6\lib\site-packages\twisted\internet\defer.py", line 382, in callback
self._startRunCallbacks(result)
File "Z:\WinPython-32bit-2.7.6.2\python-2.7.6\lib\site-packages\twisted\internet\defer.py", line 490, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File "Z:\WinPython-32bit-2.7.6.2\python-2.7.6\lib\site-packages\twisted\internet\defer.py", line 577, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "Z:\WindowsDocuments\eclipseworkspaces\BioCom\manoliagro-agmarknetscraper\src\bin\agmarknetscraper\spiders\agmarknet.py", line 34, in parse
callback=self.after_search)]
File "Z:\WinPython-32bit-2.7.6.2\python-2.7.6\lib\site-packages\scrapy-0.22.0-py2.7.egg\scrapy\http\request\form.py", line 36, in from_response
form = _get_form(response, formname, formnumber, formxpath)
File "Z:\WinPython-32bit-2.7.6.2\python-2.7.6\lib\site-packages\scrapy-0.22.0-py2.7.egg\scrapy\http\request\form.py", line 59, in _get_form
raise ValueError("No <form> element found in %s" % response)
exceptions.ValueError: No <form> element found in <200 http://agmarknet.nic.in/SearchCmmMkt.asp>
SpiderRun done
巴里奧斯。謝謝!輝煌!如果可以的話,我有一個後續問題......是否可以從搜索後頁面獲取數據,而不必讓瀏覽器實際彈出(沉默在後臺) – RightmireM
TNX讚揚,並不難想象:-)。您確實可以使用PhantomJS等所謂的「無頭」瀏覽器,而硒沒有顯示。我不知道這個瀏覽器工作得如何。如果你在一臺linux機器上,你也可以使用[xvfbwrapper](https://pypi.python.org/pypi/xvfbwrapper/0.1.3) – barrios
將Firefox放在X-window-system的虛擬幀緩衝區中。所以我碰到了另一個有這個問題的bug。我不確定是否適合在這裏發佈它,所以我開始了一個新的線程... http://stackoverflow.com/questions/22203080/selenium-will-not-click-button – RightmireM