我正在尝试使用 Mechanize 创建一个刮板,使用我的会员链接从亚马逊下订单。目标是允许用户在我的网站上下订单,其中包含使用亚马逊产品 API 获取的产品,并允许他们从我的网站订购,而不会被重定向到亚马逊。不幸的是,亚马逊没有 API 来完成订购部分,所以我构建了一个爬虫,离我很近,但需要帮助才能通过最后一页!
我停留的页面是允许您选择信用卡然后只需单击继续完成订单的页面。我认为亚马逊使用某种 javascript 来动态加载某些元素。当我使用浏览器访问此页面时,我看到我添加的信用卡带有预先选择的单选按钮,我需要做的就是点击继续结帐。如果我使用 mechanize 到达那里,然后将 的内容复制puts agent.page.body
到编辑器中并预览它,我注意到除了包含信用卡的元素以及预先选择了收音机的元素之外,一切都在那里。
这是完整的代码。您可以将其复制/粘贴到 ruby 控制台中,然后将其复制到最后一页。如果在 Mechanize 方面更有经验的人可以帮助我通过此页面,我将非常感激!
(您需要填写自己的亚马逊登录凭据才能使用此功能。)
agent = Mechanize.new
agent.cookie_jar.clear! #clear cookies
#Page 1 (Confirm add to cart)
page1 = agent.get("http://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B0002YIQEQ&Quantity.1=1")
form = page1.forms[1]
button = form.buttons.first
page2 = agent.submit(form,button)
#Page 2 (view/update cart)
agent.page.form('cartViewForm').checkboxes.first.check
form2 = agent.page.form('cartViewForm')
form2.checkbox.check
checkoutForm = page2.form_with(:id => "gutterCartViewForm")
checkoutBtn = checkoutForm.buttons.last
page3 = agent.submit(checkoutForm, checkoutBtn)
#page3 (Sign in)
form3 = page3.form('signIn')
form3.email = 'EMAIL HERE'
form3.password = 'PASSWORD HERE'
page4 = agent.submit(form3, form3.buttons.last)
#page4 (Where do you want your items shipped?)
form4 = agent.page.form_with(:action => "/gp/buy/shipaddressselect/handlers/continue.html/ref=ox_shipaddress_add_new_addr")
form4.enterAddressFullName = 'NAME'
form4.enterAddressAddressLine1 = 'ADDRESS'
form4.enterAddressAddressLine2 = ''
form4.enterAddressCity = 'CITY'
form4.enterAddressStateOrRegion = 'ST'
form4.enterAddressPostalCode = 'ZIP'
form4.enterAddressPhoneNumber = 'PHONE'
page5 = agent.submit(form4, form4.buttons.last)
#page5 (Choose your shipping options)
agent.page.form_with(:id => "shippingOptionFormId").checkboxes.last.check
agent.page.form_with(:id => "shippingOptionFormId").submit
#page 6 (gift wrapping form)
agent.page.form_with(:id => "GiftPageContiueForm").radiobuttons_with(:class => "itemGiftWrapSelect").each do |t|
t.check
end
agent.page.form_with(:id => "GiftPageContiueForm").submit
#page7 (This is where I am stuck - continue-top is indeed the right button.
agent.page.forms.each do |t|
if t.button_with(:id => "continue-top")
form = t
button = t.button_with(:id => "continue-top")
end
end
agent.submit(form,button)