如何使用Python请求提交单选按钮表单?

时间:2017-05-19 20:56:16

标签: python python-requests

我试图了解网络互动,特别是使用请求。

为此,我有兴趣使用Python with Requests从OReillyAuto.com下载汽车零件清单但是我遇到了打嗝。

当我浏览this url时,它应该显示我所指定的汽车类型的刹车片和鞋子列表。然而,它会弹出一组单选按钮,询问我是否要查看左侧,右侧或所有部件的部件。

我不能为我的生活弄清楚如何进行选择并获得我在Chrome开发工具中看到的HTML,其中包含品牌名称,价格等列表。

我尝试过很多东西,但这就是我现在所拥有的:

#import HTTP libraries
import requests
#import HTML parsing libraries
import bs4

url = 'http://www.oreillyauto.com/site/c/search/Brake+Pads+&+Shoes/C0068/C0009.oap?model=G6&vi=1432754&year=2006&make=Pontiac'

answerURL = 'http://www.oreillyauto.com/site/ConditionSelectServlet?answer=-1'

print("Making request")
session = requests.Session()
session.headers.update({'referer': url})
r = session.get(answerURL)
print(r.status_code)

oreillyList = bs4.BeautifulSoup(r.text, "lxml")

print("Writing response...")
logfile = 'C:/Users/mhurley/Portable_Python/notebooks/' + output + '.log' 
with open(logfile, 'w') as file:
    file.write(oreillyList.prettify())
print("...done writing "+logfile)

我希望我写的日志文件中包含大约5200行,就像我在查看页面源时一样。"但是,我只获得了大约3000行,看起来该列表中没有任何部分。

也许我真的得到了我的想法,但我没有正确地解释它。有关如何通过此对话请求的任何提示?

编辑:我怀疑这是与我的目的相关的HTML:

<div id="forcedVehicleQuestions" class="forcedUserInput" style="display: block; position: absolute; left: 50%; top: 40px; z-index: 6000; margin-left: -199px; margin-top: 0px;">
        <div class="forcedContents clearfix">
            <a class="btn-remove" onclick="closeForced('Search','question');">
                <svg><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#shape-remove"></use></svg>
            </a>
            <form name="forcedQuestionsForm" id="forcedQuestionsForm">
                <h2 class="sans">
                    More Product Info Required
                </h2>
                <p id="questionText" class="questionText">
                    Brake Pads - Position
                </p>
                <div id="forceQuestionsRadio">

                        <div class="form-row">
                            <label class="questionRadio checkbox-radio" id="questionRadio" for="Front">
                                <input type="radio" id="Front" name="answer" value="10219">
                                Front
                            </label>
                        </div>

                        <div class="form-row">
                            <label class="questionRadio checkbox-radio" id="questionRadio" for="Rear">
                                <input type="radio" id="Rear" name="answer" value="10290">
                                Rear
                            </label>
                        </div>

                        <div class="form-row">
                            <label class="questionRadio checkbox-radio" id="questionRadio" for="Show all">
                                <input type="radio" id="Show all" checked="" name="answer" value="-1">
                                Show all
                            </label>
                        </div>

                </div>

                <input id="questionSubmit" type="button" class="btn btn-green btn-shadow" value="Continue" onclick="setQuestionAnswer('Brake Pads - Position',document.forms['forcedQuestionsForm'].elements['answer'],'Show all');">

                <div id="forcedVehicleQuestionsLoading" class="loading load-sm">
                    <div class="spinner"></div>
                </div>
            </form>
        </div>
    </div>

我很难理解如何与此<form>元素进行交互。如何制作&#34; onclick =&#34;发生这样以便提交表单?

1 个答案:

答案 0 :(得分:-1)

您需要结合使用Selenium + BeautifulSoup。

首先,您将使用selenium在浏览器中打开网页,选择正确的单选按钮,然后提交表单。

在此之后,使用BeautifulSoup解析制动页面。