我正在学习如何使用Selenium,但我遇到了一些问题,试图找到更复杂的网站的元素。我注意到,在更复杂的网站上,xpath是模糊的,使selenium无法找到元素。例如,在这个网站https://www.nike.com.ar/,当我试图找到xpath或特定的类的男子部分,它给我这个路径:/html/body/div[4]/div/div[2]/div/div[1]/div/div [1]/ul/div[2]/div[1]/div[1]/span
所以我的问题是,在这种类型的网站上,当所有的元素都有很多类或者像这样显示XPath时,我如何找到想要交互的元素?
PS.所有这些都是在Python上使用selenium完成的。
我试过了
driver = webdriver.Chrome(service=Chromeservice(
ChromeDriverManager().install()))
driver.get('https://www.nike.com.ar/')
men = driver.find_element(By.CLASS_NAME, 'flex justify-between pv4 nikear-store-components-0-x-accordionTitleMobile nikear-store-components-0-x-accordionTitleMobile--level-0 nikear-store-components-0-x-accordionTitleMobile--open')
men.click()
time(10)
driver.quit
1条答案
按热度按时间e5nqia271#
我推荐的第一件事是仔细阅读the docs,了解每个定位器的工作原理和使用方法。
By.CLASS_NAME
只需要一个类名,而你已经传递了几个。如果你需要多个类名,你需要切换到CSS选择器。你的CSS选择器看起来像
在CSS选择器语法中,
.
位于类名之前。有关CSS选择器的更多信息:
我知道开发工具中的“copy XPath”使创建XPath变得“容易”,但通常创建的XPath都很糟糕。它们真的很长,从HTML标记开始,有很多级别,使用很多索引。所有这些都意味着即使对页面和定位器做一个很小的更改也会失败。
我试了你的XPath定位器,它没有指向网站上的任何东西。既然你提到了男士(Hombre)部分,我假设你指的是顶部导航中的元素,
一个简单的CSS选择器将找到这个链接
只需确保在复杂的站点上添加等待,以确保您正在查找的元素已准备好进行交互。使用
EC.element_to_be_clickable()
单击元素,然后使用EC.visibility_of_element_located()
单击.send_keys()
或获取.text
。