python-3.x - 使用带有包含选项的 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代码:
<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>
解决方案
推荐阅读
- java - 我应该使用生产代码中的 DAO 来设置和验证测试吗?
- javascript - 预加载器每次访问仅显示一次
- javascript - 什么是`import m from '..';`
- c# - 忽略属性不起作用 CassandraCSharpDriver
- python - 正则表达式,一个词搜索几个字母
- docker - Jenkins 管道“sidecar”容器的网络问题
- javascript - 如何使移动对象居中 html5 画布?
- android - 使用 Compressor 库时发生 java.lang.NullPointerException
- winapi - 如何用 CreateProcess() 模拟 ShellExecute()
- flutter - 如何更新颤动警报框中的按钮文本