我想从.aspx
页面的下拉列表中选择一个项目,然后点击一个按钮。然后根据下拉列表中的值更新表。选择下拉列表中的项目后,会在其上添加selected="selected"
。
<form method="post" action="page.aspx" id="aspnetForm">
<div id="div1">
<select name="DropDownList" id="DropDownList1">
<option selected="selected" value="foo">foo</option>
...
<option value="bar">bar</option>
<option value="foobar">foobar</option>
</select>
<input type="submit" name="Button" value="Submit Value" id="Button1">
</div>
<div id="div2">
<table id="table1" name="Table">
<tbody>.
<tr>...</tr>
...
<tr>...</tr>
</tbody>
</table>
</div>
</form>
有没有办法点击这个选择下拉列表中的值,单击按钮,然后使用urllib,urllib2或urllib3获取表中的数据?或者我需要使用像机械化这样的东西吗?
答案 0 :(得分:1)
我前段时间遇到了类似的问题并编写了这个小脚本。我已修改名称以符合您的示例。
# Setup
dropdown_id = 'DropDownList1'
button_id = 'Button1'
table_id = 'table1'
browser = webdriver.Chrome('C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe')
browser.get(url)
# Data getting
dropdown = _browser.find_element_by_id(dropdown_id)
for option in dropdown.dropdown.find_elements_by_tag_name('option'):
select = Select(browser.find_element_by_id(dropdown_id))
select.select_by_value(option.text)
button = browser.find_element_by_id(button_id)
button.click()
table = browser.find_element_by_id(table_id)
html = table.get_attribute('outerHTML')
browser.close()
如图所示,html是表格的html,因此您可以使用Pandas或其他任何操作来操纵该表格。根据计算机的不同,您可能需要添加一些sleep
语句以等待表加载。
答案 1 :(得分:0)
我建议先打印html表格中的值。
Mechanize有一个很好的结构来填充html表单。
例如:
import mechanize
from bs4 import BeautifulSoup
# Read url with Mechanize
url = 'https://example.com/'
br = mechanize.Browser()
br.open(url)
# Browser options
br.set_handle_redirect(True)
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Firefox')]
for form in br.forms():
print "Form name: ", form.name
br.select_form(nr=0) # nr=0 It selects html form without name
for control in br.form.controls:
print control
print "type=%s, name=%s value=%s" % (control.type, control.name, br[control.name])
用mechanize检查html表单结构后:
br.select_form(nr=0)
br.form['DropDownList'] = ['InsertValue']
response = br.submit()
search = response.read()
print search