Python 3.x 使用xpath和contains选项单击按钮
我有一个页面,我需要单击满足条件的特定按钮,我已经相应地编写了代码,但是当单击按钮事件不满足contains条件时会出现问题,因为我得到了InvaliseSelect或Exception,我相信我在编写xpath时犯了错误 在我正在抓取的页面中,有多行,每行有四列,因此对于每行,我将列中的每个元素分别附加到列表中,并使用enumerate检查按钮文本的条件,以获取列表的索引,其中按钮的文本是具有这些文本我想检查所有的值,比如第一个元素,第二个元素,第三个元素,第四个元素,然后单击所有这些条件都存在的行的td中的元素Python 3.x 使用xpath和contains选项单击按钮,python-3.x,selenium,web-scraping,Python 3.x,Selenium,Web Scraping,我有一个页面,我需要单击满足条件的特定按钮,我已经相应地编写了代码,但是当单击按钮事件不满足contains条件时会出现问题,因为我得到了InvaliseSelect或Exception,我相信我在编写xpath时犯了错误 在我正在抓取的页面中,有多行,每行有四列,因此对于每行,我将列中的每个元素分别附加到列表中,并使用enumerate检查按钮文本的条件,以获取列表的索引,其中按钮的文本是具有这些文本我想检查所有的值,比如第一个元素,第二个元素,第三个元素,第四个元素,然后单击所有这些条件都存
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文本,然后单击第五个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"> <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 & 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> </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>
WWT(风密和水密)
$2,049
是的,去阿班达
查看交付成本»
。请读一读为什么会这样。考虑使用格式化的基于文本的HTML、代码测试和错误堆栈跟踪更新问题。请读一读为什么会这样。考虑使用格式化的基于文本的HTML、代码测试和错误堆栈跟踪更新问题。