【问题标题】:How to get buttons of all forms on webpage using python selenium?如何使用 python selenium 获取网页上所有形式的按钮?
【发布时间】:2016-06-19 00:32:06
【问题描述】:

我在这里提问之前搜索了答案,但没有足够幸运。所以在这里,我正在使用 python selenium 进行网络抓取。在选择 selenium 之前,我检查了 mechanize,scrapy,但我没有用它们执行一些按钮点击然后我检查了 selenium,它似乎有一些缺点。我之所以这么说是因为如果我选择了错误的工具,请在为时已晚之前纠正我。

我关于 selenium 的问题是如何使用 xpath 获取网页上的所有元素。例如:在网页上,每个网页我都有 10 个表格,每个表格都有一个按钮。所以我想让网页上的所有表单在它们上循环并一个一个地点击按钮。

例如:

<form id="#F0">
    <input type="button" name="itens" value="Items" class="texField2" onClick="somefunction()"/>
</form>
<form id="#F0">
    <input type="button" name="itens" value="Items" class="texField2" onClick="somefunction()"/>
</form>
<form id="#F1">
    <input type="button" name="itens" value="Items" class="texField2" onClick="somefunction()"/>
</form>
<form id="#F2">
    <input type="button" name="itens" value="Items" class="texField2" onClick="somefunction()"/>
</form>
<form id="#F3">
    <input type="button" name="itens" value="Items" class="texField2" onClick="somefunction()"/>
</form>
<form id="#F4">
    <input type="button" name="itens" value="Items" class="texField2" onClick="somefunction()"/>
</form>

另一件事,我正在做的是我点击第一个表单上的按钮(它带我到另一个页面,我回到历史并点击第二个按钮然后回到历史等等)似乎刮慢。有没有更好的方法来做同样的事情?

谢谢!!

编辑:

from selenium import webdriver
mydriver = webdriver.Firefox()

baseurl = """http://www.comprasnet.gov.br/consultalicitacoes/ConsLicitacao_Filtro.asp?numprp=&dt_publ_ini=24/02/2016&dt_publ_fim=10/03/2016&chkModalidade=1,2,3,20,5,99&chk_concor=31,32,41,42&chk_pregao=1,2,3,4&chk_rdc=1,2,3,4&optTpPesqMat=M&optTpPesqServ=S&chkTodos=-1&chk_concorTodos=-1&chk_pregaoTodos=-1&txtlstUf=&txtlstMunicipio=&txtlstUasg=&txtlstGrpMaterial=&txtlstClasMaterial=&txtlstMaterial=&txtlstGrpServico=&txtlstServico=&txtObjeto="""
mydriver.get(baseurl)
mydriver.find_element_by_id('ok').click()
buttons  = mydriver.find_element_by_xpath("//form//input[@type='button']")
for button in buttons:
    button.click() 

【问题讨论】:

    标签: python selenium web-scraping mechanize


    【解决方案1】:

    您可以使用以下代码通过 xpath 获取表单按钮:

    buttons = driver.find_elements_by_xpath(".//form//input[@type='button']")
    

    并通过简单的 for 循环对其进行迭代:

    for button in buttons:
        button.click() 
    

    您也可以使用find_elements_by_css_selector 函数来获取元素:

    buttons = driver.find_elements_by_css_selector("input[type='button']")
    

    【讨论】:

    • 我试过了,但对我不起作用。编辑代码以添加我的脚本它为按钮中的按钮提供错误:TypeError:'WebElement' object is not iterable
    • @StackUP 是否需要使用 xpath ?
    • 对不起,可能是我没有得到你。我们还有其他方法可以在每个表单上获取提交按钮吗?
    • @StackUP 是的,你可以使用driver.find_elements_by_css_selector('input[type=button])`函数来获取所有按钮
    • @StackUP 所以你必须再次通过css选择器获取按钮并点击下一个按钮[index].click
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多