首页 > 解决方案 > 使用带有包含选项的 xpath 单击按钮

问题描述

在此处输入图像描述我有一个页面,我需要单击满足我相应编写代码的条件的特定按钮,但是当包含条件不满足单击按钮事件时出现问题,因为我得到一个 InvaliSelectorException 我相信我做错了什么在编写 xpath 的问题上。

在我正在抓取的页面中,有多行,每行有四列,因此对于每一行,我将列的每个元素分别附加到列表中,并使用获取索引的枚举检查按钮文本上的条件以了解交付成本在按钮文本为的列表中查看具有这些文本的人的交付成本我想检查所有值,例如第一个元素、第二个元素、第三个元素、第四个元素,然后单击该行的 td 中的元素所有这些条件都存在的地方

for row in rows:
    try:
        SizeOfContainer = row.find_element_by_xpath('//*[@id="text-size"]/span').text.replace('Double \n Doors', "")
        SizeOfContainer1 = SizeOfContainer.replace('HC', "")
        SizeOfContainer2 = SizeOfContainer1.replace('Double Doors', "")
        SizeOfContainer3 = SizeOfContainer2.replace('\n', "")
        SizeOfContainer4 = SizeOfContainer3.replace('DoubleDoors', "")
        print(SizeOfContainer4)
        SizeOfContainers.append(SizeOfContainer4)
        Ranking = row.find_element_by_xpath('td[2]/b').text
        Ranking1 = Ranking.replace('\n',"")
        print(Ranking1)
        Rankingofcont.append(Ranking1)
        Price = row.find_element_by_xpath('td[3]/h4').text
        pricelist.append(Price)
        print(Price)
        DeliveryAvailable = row.find_element_by_xpath('td[4]').text
        print(DeliveryAvailable)
        deliveryav.append(DeliveryAvailable)
        CityName = DeliveryAvailable.replace("Yes, to","")
        try:
            delsta = row.find_element_by_xpath('td[5]/a/b').text
        except NoSuchElementException:
            delsta = row.find_element_by_xpath('td[5]/form/button/b').text
        print(delsta)
        delstatus.append(delsta)
    except NoSuchElementException:
        pass
    listnumbcond = [i for i, x in enumerate(delstatus) if x == "View Delivery Cost »"]
    print(listnumbcond)
    pricenew=[]
    SizeOfContainersnew = []
    Rankingofcontnew = []
    deliveryavnew = []
    for i in listnumbcond:
        pricenew.append(pricelist[i])
    for i in listnumbcond:
        SizeOfContainersnew.append(SizeOfContainers[i])
    for i in listnumbcond:
        Rankingofcontnew.append(Rankingofcont[i])
    for i in listnumbcond:
        deliveryavnew.append(deliveryav[i])
    print(pricenew)

    for j in pricenew:
        ss = pricenew.index(j)
        print(ss)
        aj = SizeOfContainersnew[ss]
        print(aj)
        ag = Rankingofcontnew[ss]
        print(ag)
        adf = deliveryavnew[ss]
        aj1 = str(aj)
        g = str(j)
        ddjel = "//*[contains(text()," + '"' +aj1 + '"' + ")]"+"//*[contains(text()," + '"' +ag + '"' + ")]"+"//*[contains(text()," + '"' +g + '"'+ ")]"+"'//*[contains(text()," + '"' +adf + '"' + ")]/../[@class="+"'button radius small dropshadowtiny margin4r'"+"]'"
        Delivery_cost = row.find_element_by_xpath(ddjel).click()
        delivery_details()

我希望检查 td 是否包含第一个文本,然后检查下一个 td 中的第二个文本的值,然后检查第三个 td 文本,然后检查 td 文本(如果全部满足),然后单击第五个 td 按钮。

所有这些要检查的值都是从我存储它的列表中获取的。

我也附上了页面的图片及其html标签在此处输入图像描述

以下是html代码:

<tr>
<td class="text-center">
    <div class="inline min-120">                                            
        <div id="container-size">
            <a href="/includes/size-guide.php" data-reveal-id="ModalSize" data-reveal-ajax="true">
            <img alt="20 container" id="image-size" src="/img/sizes/20-left.png" class="dropshadowtiny">
            <p id="text-size">&nbsp;<span class="black-text">20'</span>
                                                            </p>
        </a></div><a href="/includes/size-guide.php" data-reveal-id="ModalSize" data-reveal-ajax="true">

        </a>
    </div>


</td>
<td class="text-center">
            <b>WWT (Wind &amp; Water Tight)</b><br>

            <sub><a href="/includes/ratings-guide.php" data-reveal-id="ModalRatings" data-reveal-ajax="true">What's this?</a></sub>
                                                                                            </td>
<td class="text-center">
    <h4><a id="1" data-icon-name="" class="myModalIconJS left"></a>$2,049                                       </h4>
                                        </td>
<td class="text-center">                                        <i class="fi-check style28 size-32"></i><small>Yes, to </small>Abanda                                   </td>
<td class="text-center" nowrap="">
    <form method="post" action="/cart.php" class="no-margin-bottom">                
        <label>&nbsp;</label>
        <button class="button radius small dropshadowtiny margin4r"><i class="fi-star style20"></i> <b>View Delivery Cost »</b></button>

        <input type="hidden" name="buyer-city_nameid" value="4829438">
        <input type="hidden" name="buyer-state_admincode" value="US.AL">        
        <input type="hidden" name="buyer-country" value="USA">

        <input type="hidden" name="buyer-depot_city" value="Atlanta">
        <input type="hidden" name="buyer-depot_state" value="GA">
        <input type="hidden" name="buyer-depot_country" value="USA">                        

        <input type="hidden" name="items-product_id" value="1-wwt-20-Atlanta">
        <input type="hidden" name="items-quantity" value="1">
        <input type="hidden" name="items-size" value="20">
        <input type="hidden" name="items-rating" value="wwt">
        <input type="hidden" name="items-price" value="2049">           

        <input type="hidden" name="add_scfs_to_cart" value="yes">                                                                       
    </form>
</td>

标签: python-3.xseleniumweb-scraping

解决方案


推荐阅读