이 url에서 모든 (5) 테이블을 가져 오려고합니다.splinter select (value)가 속성 오류를 반환합니다.
개별 페이지의 드롭 박스 내가 type(value)
로 채울 수 있지만,이 페이지를 새로 고침하지 않습니다. 객체가 DOM에 더 이상 첨부되어 있지 않으므로 nextPage 버튼을 사용하여 페이지를 단계별로 실행하지 못합니다 (파편에서이를 해결하는 방법을 모르겠습니다).
드롭 다운을 채우려 고 시도한 다음 선택하는 중입니다.
역 추적 (마지막으로 가장 최근 통화) : 나는 아래의 코드를 사용
File "<stdin>", line 69, in <module>
File "/usr/local/lib/python2.6/dist-packages/splinter/driver/webdriver/__init__.py", line 334, in select
self.find_by_xpath('//select[@name="%s"]/option[@value="%s"]' % (self["name"], value))._element.click()
File "/usr/local/lib/python2.6/dist-packages/splinter/element_list.py", line 73, in __getattr__
self.__class__.__name__, name))
AttributeError: 'ElementList' object has no attribute '_element'
이이 오류를 반환합니다. 어떤 도움을 가장 높이 평가! 선택 요소가 이름을 가지고 있지 않기 때문에
from splinter import Browser
from lxml.html import parse
from StringIO import StringIO
from time import sleep
url = r'http://www.molpower.com//VLCWeb/UIAboutMOL/PortScheduleInfo.aspx?pPort=NLRTMDE&pFromDate=01-Oct-2013&pToDate=10-Oct-2013'
def _unpack(row, kind = 'td'):
elts = row.findall('.//%s' %kind)
return [val.text_content() for val in elts[0:7]]
def parse_schdls_data(table):
rows = table.findall('.//tr')
hdrs = _unpack(rows[0], kind = 'th')
data = [_unpack(r, kind = 'td') for ir, r in enumerate(rows[1:-1]) if ir % 3 == 0]
return (hdrs, data)
with Browser() as browser:
browser.visit(url)
print browser.url
pages = browser.find_by_tag('option')
pagevals = [p.value for p in pages]
maxpagev = max(pagevals)
inputs = browser.find_by_tag('input')
'''
for ip, inp in enumerate(inputs):
if inp.has_class('btnMRBPageNext'):
#print ip, inp.value, inp.text
#Need input 35 for the nextPage
inp.click()
'''
selects = browser.find_by_tag('select')
for ns, sel in enumerate(selects):
if sel.has_class('inputDropDown'):
print ns, sel.value, sel.text
sel.type(sel.value)
sleep(2)
moldata = list()
for page in range(len(pagevals)):
content = browser.html
parsed = parse(StringIO(content))
doc = parsed.getroot()
tables = doc.findall('.//table')
schdls = tables[91]
#Get all rows from that table
rows = schdls.findall('.//tr')
hdr, data = parse_schdls_data(schdls)
#print page, data
moldata.append(data)
while browser.is_element_not_present_by_tag('select', wait_time = 2):
pass
inputs = browser.find_by_tag('input')
selects = browser.find_by_tag('select')
#inputs[35].click()
#selects[0].type(str(page + 1))
selects[0].select(selects[0].value)