繁体   English   中英

用硒Python选择元素

[英]Select element with selenium python

考虑以下HTML:

 <div class="nav-category__col" id="category_nav_level_3" style="display: block;">
   <input type="hidden" value="1" name="videogame_type" id="videogame_type">
   <ul class="nav-category__list" adparam_name="videogame_type" role="radiogroup">
      <li class="nav-category__list-item  nav-category__list-item--selected" id="1" tabindex="-1" role="radio" aria-checked="true">
         <p class="nav-category__name">Consoles</p>
      </li>
      <li class="nav-category__list-item " id="2" tabindex="-1" role="radio" aria-checked="false">
         <p class="nav-category__name">Jogos</p>
      </li>
      <li class="nav-category__list-item " id="3" tabindex="-1" role="radio" aria-checked="false">
         <p class="nav-category__name">Acessórios</p>
      </li>
   </ul>
</div>

我想点击<p class="nav-category__name">Consoles</p>所以我尝试这样做:

    elem = driver.find_element_by_xpath("//*[@id="1"]/p")
    elem.click()

我通过检查元素并从中复制xpath来找到此xpath,但是无论如何它都会显示“无法找到元素”。 我该怎么办?

我不太了解HTML,但是我能够按ID或按名称查找其他元素。

我建议不要在脚本中使用time.sleep() ,因为即使您的元素可以在不到给定的时间内使用,它也会暂停脚本固定的持续时间。

假设您已经放置了time.sleep(5)所以即使您的元素在2秒钟内可用,它也会在脚本中准确暂停5秒钟。

克服这种情况的更好方法是使用Implicit WaitExplicit Wait

隐式等待 -

隐式等待告诉WebDriver在尝试查找不立即可用的一个或多个元素时在一定时间内轮询DOM。

driver.implicitly_wait(10) # seconds

显式等待 -

显式等待是您定义的代码,用于等待特定条件发生后再继续执行代码。

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "id"))

请进一步参考

您不需要了解Selenium IDE的任何HTML属性,

https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/

在Firefox浏览器中安装此功能(仅适用于Firefox)。 然后打开它,按“记录”按钮,然后进行场景设置。 最后停止并为Python或其他语言导出代码。 如果您环顾四周,可以看到任何属性类型,例如“名称,id,cssSelector,Xpath ...”,并且可以更改所需的属性类型。

或者你的问题,

elem = driver.find_element_by_name("q") // Name
elem = driver.find_element_by_id("q") // ID
menu = driver.find_element_by_css_selector(".nav") // CssSelector

你说对了 :)

find_element_by_*methods

有一个不错的代码:)

好吧,我很傻:我试图在页面上选择一个元素。 通过在elem = driver.find_element_by_xpath("//*[@id="1"]/p")之前添加elem = driver.find_element_by_xpath("//*[@id="1"]/p") time.sleep(3)解决

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM