我正在尝试用selenium和chrome驱动程序制作一个预订程序。Selenium只能通过XPATH找到元素,无法定位By.ID
、By.CSS_SELECTOR
或By.CLASS_NAME
元素。我尝试用不同的形式表达它。通过类定位在我程序中的其他文件中工作,这就是为什么我感到困惑。
下面是我的代码中(我认为)有问题的部分:
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.common.by import By
class BookingFiltration():
def __init__(self, driver:WebDriver):
self.driver = driver
def apply_star_rating(self, star_value):
star_filter_box=self.driver.find_element(By.ID,"filter_group_class_:R14q:")
star_child_elements = star_filter_box.find_elements(By.CSS_SELECTOR, '*')
for star_element in star_child_elements:
if str(star_element.get_attribute('innerHTML')).strip() == f'{star_value} stars':
star_element.click()
它不能通过ID定位元素。下面是我尝试定位的内容
它连接到调用函数的主文件和另一个函数定义文件。
下面是后者的相关部分:
import booking.constants as const
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from booking.booking_filtrations import BookingFiltration
import time
# <...>
def apply_filtrations(self):
filtration = BookingFiltration(driver=self)
filtration.apply_star_rating(star_value=5)
为什么它不能通过XPATH以外的方法找到这个元素(或者任何一个)?如果提供的代码不够,我道歉。如果有必要,我会重新提问。
1条答案
按热度按时间sqougxex1#
你用什么xpath来定位星星过滤器框?不管怎样,我怀疑这个问题是由于包含
:
字符的id造成的。我试过了,效果很好另外,由于两个
:
之间的部分可能会发生变化(在您的示例中是R14q
,在我的示例中是R1cq
),您可以考虑使用其中
*=
表示“包含”。