python-3.x 使用 selenium 在复杂网站上查找元素

sr4lhrrt  于 2023-04-22  发布在  Python
关注(0)|答案(1)|浏览(115)

我正在学习如何使用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
e5nqia27

e5nqia271#

我推荐的第一件事是仔细阅读the docs,了解每个定位器的工作原理和使用方法。
By.CLASS_NAME只需要一个类名,而你已经传递了几个。如果你需要多个类名,你需要切换到CSS选择器。

<div class="one two three">

你的CSS选择器看起来像

div.one.two.three

在CSS选择器语法中,.位于类名之前。
有关CSS选择器的更多信息:

  1. CSS选择器规范
  2. Selenium Tips: CSS Selectors
  3. Taming Advanced CSS Selectors
    我知道开发工具中的“copy XPath”使创建XPath变得“容易”,但通常创建的XPath都很糟糕。它们真的很长,从HTML标记开始,有很多级别,使用很多索引。所有这些都意味着即使对页面和定位器做一个很小的更改也会失败。
    我试了你的XPath定位器,它没有指向网站上的任何东西。既然你提到了男士(Hombre)部分,我假设你指的是顶部导航中的元素,
<a class="nikear-store-components-0-x-itemLinkDesktop nikear-store-components-0-x-itemLinkDesktop--level-0 w-100 no-underline t-small outline-0 db tc link truncate" href="/hombre">Hombre</a>

一个简单的CSS选择器将找到这个链接

a[href='/hombre']

只需确保在复杂的站点上添加等待,以确保您正在查找的元素已准备好进行交互。使用EC.element_to_be_clickable()单击元素,然后使用EC.visibility_of_element_located()单击.send_keys()或获取.text

相关问题