Python:如何使用Browser splinter选中复选框?

Jo *_* Ko 6 python web-scraping python-2.7 splinter

一旦我将以下项目添加到购物车:http://www.supremenewyork.com/shop/accessories/wau85w4km/cxv3ybp1w并转到结帐页面:https://www.supremenewyork.com/checkout,有一个条款和条件复选框,我试图检查,Browser’s splinter但我不能这样做:

例如,尝试了以下但是都遇到了错误:

from splinter import Browser

browser = Browser("chrome")
browser.find_by_id('order_terms').click()         
#Error: selenium.common.exceptions.WebDriverException: Message: unknown error

browser.check('order[terms]').click()
#Error: selenium.common.exceptions.ElementNotVisibleException: Message: element not visible

browser.find_by_name('order[terms]').click()
#Error: selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
Run Code Online (Sandbox Code Playgroud)

我能做错什么?我怎样才能选中复选框Browser splinter

提前谢谢你,一定会upvote /接受答复

ale*_*cxe 4

有两点需要指出:

  • 为了避免计时问题,您需要在脚本中进行“显式等待” - 等待元素可见或存在,然后再继续执行下一个操作
  • 可以并且应该通过单击包含labelinput其他辅助元素的整个元素来单击此复选框

这是完整的代码:

from splinter import Browser

browser = Browser("chrome")
browser.visit("http://www.supremenewyork.com/shop/accessories/wau85w4km/cxv3ybp1w")
browser.wait_time = 10

try:
    browser.is_element_visible_by_css("input[name=commit]", 10)
    browser.find_by_css("input[name=commit]").first.click()

    browser.is_element_visible_by_css("a.checkout", 10)
    browser.find_by_css("a.checkout").first.click()

    browser.is_element_present_by_css("label.terms", 10)
    browser.find_by_css('label.terms').click()
finally:
    browser.quit()
Run Code Online (Sandbox Code Playgroud)

这是一个工作代码,可以转到主页,导航到滚动条中的第三个产品,将其添加到购物车,检查并接受使用条款,time.sleep()最后仅供您查看结果:

from splinter import Browser

browser = Browser("chrome")
browser.visit("http://www.supremenewyork.com/shop")
browser.wait_time = 10

try:
    # open a product
    browser.is_element_visible_by_css("#shop-scroller > li > a", 10)
    browser.find_by_css("#shop-scroller > li > a")[2].click()

    # add to cart
    browser.is_element_visible_by_css("input[name=commit]", 10)
    browser.find_by_css("input[name=commit]").first.click()

    # checkout
    browser.is_element_visible_by_css("a.checkout", 10)
    browser.find_by_css("a.checkout").first.click()

    # accept terms and conditions
    browser.is_element_present_by_css("label.terms", 10)
    browser.find_by_css('label.terms').click()

    import time
    time.sleep(10)
finally:
    browser.quit()
Run Code Online (Sandbox Code Playgroud)