本文介绍了在 Python 中使用 Spynner 模块(需要选择一个 Javascript 元素)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用 Python 模块 Spynner 选择 Javascript 元素.

Trying to select a Javascript element using the Python module Spynner.

(注意:用户名和密码不是真实的)

(NOTE: Username and Password not real)

这是我试图从中提取的列表:

Here's the list I am trying to pull it from:

<tr>
<td valign="middle" align="right">
<select onkeypress="javascript:if ( event.keyCode == 13 ){valid();}" style="font-family:Tahoma; font-size:11px;FONT-WEIGHT :normal;height:20px;" name="mkt">
<option value="0">All Markets</option>
<option value="IBESLA~AR">Argentina </option>
<option value="IBESAA~AU">Australia </option>
<option value="IBESEA~AT">Austria </option>
<option value="IBESEB~BE">Belgium </option>
<option value="IBESLB~BR">Brazil </option>
<option value="IBESNC~CA">Canada </option>
<option value="IBESLC~CL">Chile </option>
<option value="IBESFC~CN">China </option>
<option value="IBESLL~CO">Colombia </option>
<option value="IBESDC~HR">Croatia </option>
<option value="IBESEC~CZ">Czech Republic </option>
<option value="IBESSD~DK">Denmark </option>
<option value="IBESKE~EG">Egypt </option>
<option value="IBESDE~EE">Estonia </option>
<option value="IBESSF~FI">Finland </option>
<option value="IBESEF~FR">France </option>
<option value="IBESED~DE">Germany </option>
<option value="IBESEH~GR">Greece </option>
<option value="IBESFH~HK">Hong Kong </option>
<option value="IBESEM~HU">Hungary </option>
<option value="IBESFI~IN">India </option>
<option value="IBESFL~ID">Indonesia </option>
<option value="IBESEZ~IE">Ireland </option>
<option value="IBESFZ~IL">Israel </option>
<option value="IBESEI~IT">Italy </option>
<option value="IBESFJ~JP">Japan </option>
<option value="IBESFR~JO">Jordan </option>
<option value="IBESFM~MY">Malaysia </option>
<option value="IBESKP~MU">Mauritius </option>
<option value="IBESLM~MX">Mexico </option>
<option value="IBESKM~MA">Morocco </option>
<option value="IBESEN~NL">Netherlands </option>
<option value="IBESAN~NZ">New Zealand </option>
<option value="IBESSN~NO">Norway </option>
<option value="IBESFQ~PK">Pakistan </option>
<option value="IBESLP~PE">Peru </option>
<option value="IBESFP~PH">Philippines </option>
<option value="IBESEG~PL">Poland </option>
<option value="IBESEP~PT">Portugal </option>
<option value="IBESEK~RO">Romania </option>
<option value="IBESER~RU">Russia </option>
<option value="IBESFS~SG">Singapore </option>
<option value="IBESDR~SK">Slovakia </option>
<option value="IBESDV~SI">Slovenia </option>
<option value="IBESKS~ZA">South Africa </option>
<option value="IBESFK~KR">South Korea </option>
<option value="IBESEE~ES">Spain </option>
<option value="IBESBL~LK">Sri Lanka </option>
<option value="IBESSS~SE">Sweden </option>
<option value="IBESES~CH">Switzerland </option>
<option value="IBESFA~TW">Taiwan </option>
<option value="IBESFT~TH">Thailand </option>
<option value="IBESET~TR">Turkey </option>
<option value="IBESEX~GB">United Kingdom </option>
<option value="IBESNA~US">United States </option>
</select>
</td>
<td valign="middle">
<img width="5px" src="images/spacer.gif">
</td>
<td valign="middle">
<a href="javascript:setChildFrameWidth();valid()">
</td>
<td valign="middle">
<img width="10px" src="images/spacer.gif">
</td>
</tr>

这是我的代码:

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("IBESNA~US")
br.browse()
br.close()

我在选择时做错了什么?它给了我错误:

What am I doing wrong with the select? It gives me the error:

Traceback (most recent call last):
  File "C:\Python27\Sample Programs\Spynner Basic.py", line 17, in <module>
    br.select("IBESNA~US")
  File "C:\Python27\lib\site-packages\spynner\browser.py", line 862, in select
    self._runjs_on_jquery("select", 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 select: jq('IBESNA~US').attr('selected', 'selected')

推荐答案

这有点猜测,但看起来 select 需要一个 css 选择器.由于 IBESNA~US 不是标签,因此无法选择它并引发错误.尝试类似 br.select('option[value="IBESNA~US"]')

This is a bit of a guess, but it looks like select takes a css selector. Since IBESNA~US isn't a tag, it can't select it and throws an error. Try something like br.select('option[value="IBESNA~US"]')

这篇关于在 Python 中使用 Spynner 模块(需要选择一个 Javascript 元素)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 13:49