[英]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 Wait
或Explicit 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.