2011-05-29 22 views
1

我以前有類似的問題,但我不明白爲什麼它不會讓我點擊複選框。我相信我通過選擇錯誤的方式來檢查複選框時發生錯誤。注入Javascript(Python Web Scraper)的錯誤

這裏是我的回溯:

Traceback (most recent call last): 
    File "C:\Python27\Sample Programs\Spynner Basic.py", line 19, in <module> 
    br.check('input[name="AdvSearchView$SRView$_resultGrid$ctl01$chk"]') 
    File "C:\Python27\lib\site-packages\spynner\browser.py", line 846, in check 
    self._runjs_on_jquery("check", jscode) 
    File "C:\Python27\lib\site-packages\spynner\browser.py", line 394, in _runjs_on_jquery 
    raise SpynnerJavascriptError("error on %s: %s" % (name, code)) 
SpynnerJavascriptError: error on check: jq('input[name="AdvSearchView$SRView$_resultGrid$ctl01$chk"]').attr('checked', true) 

這裏的HTML/CSS部分:

<tr> 
<td align="left" style="width: 100%; vertical-align: top; background-color: #ffffff; height: 100%"> 
<table id="AdvSearchView_SRView__resultGrid" cellspacing="0" border="0" style="border-width:0px;width:100%;border-collapse:collapse;" rules="cols"> 
<tbody> 
<tr class="columnheader"> 
<td align="center" style="width:20px;FONT-SIZE:70%;BORDER-BOTTOM:solid 1px;PADDING-BOTTOM:3px;"> 
<span title="Select/Deselect All"> 
<input id="AdvSearchView_SRView__resultGrid_ctl01_chk" type="checkbox" onclick="javascript:ResultGrid.checkUncheckAll('AdvSearchView_SRView__resultGrid', this);"  name="AdvSearchView$SRView$_resultGrid$ctl01$chk"> # THIS IS THE IMPORTANT PART I THINK 
</span> 
</td> 
<td align="center" style="width:25px;FONT-SIZE:70%;BORDER-BOTTOM:solid 1px;PADDING-BOTTOM:3px;">Type</td> 
<td align="left" style="FONT-SIZE:70%;BORDER-BOTTOM:solid 1px;PADDING-BOTTOM:3px;WHITE-SPACE:NOWRAP;"> 
<a href="javascript:callback.doCallback('AdvSearchView$SRView$_sortingHeaders','DisplayTicker',null);">Ticker</a> 
</td> 
<td align="center" style="FONT-SIZE:70%;BORDER-BOTTOM:solid 1px;PADDING-BOTTOM:3px;WHITE-SPACE:NOWRAP;"> 
<a href="javascript:callback.doCallback('AdvSearchView$SRView$_sortingHeaders','Date',null);">Date</a> 
<img style="border-width:0px;" src="/thomson_financial_research_web_ui/3_19/Images/sort_desc.jpg"> 
</td> 
<td align="left" style="FONT-SIZE:70%;BORDER-BOTTOM:solid 1px;PADDING-BOTTOM:3px;"> 
<a href="javascript:callback.doCallback('AdvSearchView$SRView$_sortingHeaders','Title',null);">Headline </a> 
</td> 
<td align="right" style="FONT-SIZE:70%;BORDER-BOTTOM:solid 1px;PADDING-BOTTOM:3px;"> 
<a href="javascript:callback.doCallback('AdvSearchView$SRView$_sortingHeaders','Pages',null);">Pgs</a> 
</td> 
<td align="left" style="width:180px;FONT-SIZE:70%;BORDER-BOTTOM:solid 1px;PADDING-BOTTOM:3px;"> 
<a href="javascript:callback.doCallback('AdvSearchView$SRView$_sortingHeaders','Contributor',null);">Contributor</a> 
</td> 
</tr> 

這裏是我的Python代碼:

from __future__ import division 
from __future__ import unicode_literals 
from __future__ import print_function 
import re 
import spynner 
from BeautifulSoup import BeautifulSoup 
import time 
br = spynner.Browser() 
br.create_webview() 
br.show() 
br.set_html_parser("BeautifulSoup") 
br.load("https://www.thomsononeim.com/s-log_in.asp") 
br.fill("input[name=txtLoginID]", "username") 
br.fill("input[name=txtPWD]", "password") 
br.click("input[name=Submit]", wait_load=True) 
br.click("input[name=Market]", wait_load=True) 
br.select('option[value="IBESNA~US"]') 
br.click("#MktGoImg", wait_load=True) 
br.check('input[name="AdvSearchView$SRView$_resultGrid$ctl01$chk"]') 
br.browse() 
br.close() 
+0

呃,爲什麼downtick?這是一個合法的問題,那是新奇的。 – 2011-05-29 17:44:42

回答

0

我相信這有做該名稱在選擇器上出錯。

+0

回答你自己的問題?!​​?! – 0x434D53 2011-09-19 21:01:46

0

我可能是錯的,但我認爲這是一個實際的錯誤。你應該把它報告給Kiorky。 我將您的html複製到本地文檔並運行您的代碼(以及它的變體)。

如果打開調試就可以看到這一點:

Javascript console (undefined:1): ReferenceError: Can't find variable: jq 
Javascript console (undefined:1): ReferenceError: Can't find variable: jq 

這使得約沒有任何意義。這是一個spynner定義的變量,爲什麼不存在?

如果你嘗試:

browser.load('http://www.lehigh.edu/~inwww/form-test.html') 
browser.uncheck('input[type=checkbox]') 
browser.check('input[type=checkbox]') 

它工作得很好。

爲了獲得更多的調試信息,這樣做:

browser.debug_level = spynner.INFO 

檢查API或來源是否有什麼其他調試級別的選項。 我可能遠離事實,所以也許別人可以對此有所瞭解?

編輯:

如果您添加到源html源代碼:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> 

它的工作原理。似乎jquery沒有正確注入(根據文檔應該是)。