使用 urllib 从下拉列表中选择

Selecting from dropdown list using urllib

我想从 .aspx 页面的下拉列表中 select 一个项目,然后单击一个按钮。然后根据下拉列表中的值更新 table。当下拉列表中的项目被 select 编辑时,它会添加 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>

有没有办法点击这个select下拉列表中的一个值,点击按钮,然后使用urllib、urllib2或urllib3获取table中的数据?或者我需要使用机械化之类的东西吗?

我建议首先打印 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

我刚才遇到了与您类似的问题,为此编写了这个小脚本。我已经修改了名称以匹配您的示例。

# 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 是 table 的 html,因此您可以使用 Pandas 之类的东西进行操作或使用 [=19] 进行任何其他操作=].根据机器的不同,您可能需要添加一些 sleep 语句来等待 table 加载。