python 根据已知字符串查找列表项

beq87vna  于 2023-02-18  发布在  Python
关注(0)|答案(2)|浏览(123)

我在自学selenium / python的时候玩了一下booking.com。我试图根据一个已知的字符串来选择一种货币,例如“USD”。
我可以单击货币图标打开货币选择模态,但当我尝试输入find element where text = 'USD'时,我得到:

selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified

1.以下是“USD”的列表项:

<li class="ccff2b4c43 ea27cffb06"><button data-testid="selection-item" type="button" class="fc63351294 ea925ef36a bf97d4018a ae8177da1f cddb75f1fd"><div class="a1b3f50dcd a1f3ecff04 b2fe1a41c3 db7f07f643 d19ba76520"><div class="b1e6dd8416 aacd9d0b0a"><span class="cf67405157">U.S. Dollar<div class=" ea1163d21f">USD</div></span></div><div class=""></div></div></button></li>

2.下面是我尝试搜索的已知字符串:

currency = 'USD'

3.下面是我尝试在HTML中查找(然后选择)此字符串的过程:

selected_currency_element = self.find_element(By.CSS_SELECTOR, f'//span[text()={currency}]')
selected_currency_element.click()

我假设我不需要把这个模态的整个无序列表读入一个数组,然后循环遍历它来找到字符串,或者我需要吗?

7uhlpewt

7uhlpewt1#

有几件事要纠正。
1.使用的语法适用于XPATH,您已使用CSS_SELECTOR,需要更改为XPATH
selected_currency_element = self.find_element(By.XPATH, f'//span[text()={currency}]')
1.如果您看到节点USD位于父节点SPANDIV标记内,那么您的xpath应该类似于selected_currency_element = self.find_element(By.XPATH, f'//span[.//div[text()="{currency}"]]')

soat7uwm

soat7uwm2#

我没有使用缩写,而是使用了长名称。这样做效果很好。顺便说一下,我使用Firefox作为我的浏览器

from selenium.webdriver.common.by import By
from selenium import webdriver

def change_currenecy(country):
    
    dvr = webdriver.Firefox()
    dvr.get("https://www.booking.com/")
    dvr.find_elements(By.XPATH, "//span[contains(text(),'USD')]")[0].click()
    dvr.find_elements(By.XPATH, f"//span[contains(text(),'{country}')]")[0].click()
    
    
change_currenecy("Thai Baht")

相关问题