我在自学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()
我假设我不需要把这个模态的整个无序列表读入一个数组,然后循环遍历它来找到字符串,或者我需要吗?
2条答案
按热度按时间7uhlpewt1#
有几件事要纠正。
1.使用的语法适用于
XPATH
,您已使用CSS_SELECTOR
,需要更改为XPATH
selected_currency_element = self.find_element(By.XPATH, f'//span[text()={currency}]')
1.如果您看到节点
USD
位于父节点SPAN
的DIV
标记内,那么您的xpath
应该类似于selected_currency_element = self.find_element(By.XPATH, f'//span[.//div[text()="{currency}"]]')
soat7uwm2#
我没有使用缩写,而是使用了长名称。这样做效果很好。顺便说一下,我使用Firefox作为我的浏览器